繁体   English   中英

检查 MySQL 条目是否存在,如果存在,则覆盖其他列

[英]Check if MySQL entry exists, if it does, overwrite other columns

我有一个 MySQL 表,如下所示

UID | Thing1 | Thing2 | Date

UID 列已设置为唯一且由用户 ID + 日期作为整数组成。 IE 7620150715

我想要做的是检查 UID 是否存在,如果存在,则使用最新信息更新 thing1 和 thing2 列。

如果 UID 不存在,则为所有信息创建一个新行。

目前,可以进入的是

$sql = "INSERT INTO things2 (uid, thing1, thing2, date) VALUES (:uid, :thing1,:thing2,:date)";

但这在使 UID 唯一后不起作用。

我发现 ON DUPLICATE KEY UPDATE 语句似乎是我正在寻找的,但所有答案似乎都在输入中添加 +1,这不是我想要做的。

我正在寻找的一些伪语法会像这样

$sql = "INSERT INTO things2 (uid, thing1, thing2, date) VALUES (:uid, :thing1,:thing2,:date ON DUPLICATE KEY UPDATE (thing1, thing2) VALUES (:thing1, :thing2)";

什么是正确的语法?

最简单/最清晰的方法需要两个步骤:

首先只对(新)UID 执行 INSERT OR IGNORE。 暂时不要理会这些值,因为无论如何您都会更新。 只需确保该表允许使用适当的默认值并且没有太多约束:

INSERT OR IGNORE INTO things2 (uid) VALUES (:uid)

然后执行 UPDATE ... SET a=b WHERE UID=.. 以实际更新记录:

UPDATE thing1=:thing1, thing2=:thing2 WHERE UID = :uid

(未测试,请检查,因为我更喜欢 C++/sqlite 而不是 MySql/php)

你的语法有点错误。 如果 INSERT 失败,那么您可以使用标准的 UPDATE 语法编写 UPDATE 代码,如下所示。

$sql = "INSERT INTO things2 
               (uid, thing1, thing2, `date`) 
        VALUES (:uid, :thing1,:thing2,:date )
        ON DUPLICATE KEY 
        UPDATE things2 SET thing1 = :thing1, thing2 = :thing2, `date` = :date";

date也是一个保留字,所以最好用反引号把它包起来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM