【发布时间】:2011-05-11 10:47:11
【问题描述】:
我想向数据库表中添加一行,但如果存在具有相同唯一键的行,我想更新该行。
例如:
INSERT INTO table_name (ID, NAME, AGE) VALUES(1, "A", 19);
假设唯一键是ID,在我的数据库中,有一行ID = 1。在这种情况下,我想用这些值更新该行。通常这会报错。
如果我使用INSERT IGNORE,它会忽略错误,但仍然不会更新。
【问题讨论】:
-
SQL 需要此用例的官方语法,该语法不会强制语法中的值重复并保留主键。
-
要获取受影响的id,请参考MySQL ON DUPLICATE KEY - last insert id?
-
警告: 从 5.7 版开始,此方法不直接支持将 WHERE 子句作为 INSERT/UPDATE 操作的一部分。此外,UPDATE 实际上算作两个单独的操作(DELETE 和 INSERT)......如果这对审计目的很重要。 (Learnbit)
标签: mysql sql insert-update upsert