Mysql批量更新: on duplicate key update
ON DUPLICATE KEY UPDATE
是MySQL特有的语法,当插入的行的主键或唯一键值与已有的行的主键或唯一键值相同时,则执行UPDATE操作。
解决方案:
- 使用INSERT INTO ... ON DUPLICATE KEY UPDATE ...语法。
例如,有一个表students
,其中包含id
和name
两个字段,id
是主键。
INSERT INTO students (id, name) VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie');
如果你尝试插入一个已存在的id
,例如id
为1的记录,MySQL将执行更新操作:
INSERT INTO students (id, name) VALUES (1, 'Alice') ON DUPLICATE KEY UPDATE name = VALUES(name);
这将把id
为1的记录的name
字段更新为'Alice'
。
- 使用INSERT IGNORE INTO ... ON DUPLICATE KEY UPDATE ...语法。
如果你想忽略重复的键,而不是更新它们,你可以使用INSERT IGNORE
语法。
例如:
INSERT IGNORE INTO students (id, name) VALUES (1, 'Alice') ON DUPLICATE KEY UPDATE name = VALUES(name);
如果id
为1的记录已经存在,MySQL将不执行任何操作,也不会报错。
注意:VALUES(value)
函数用于获取INSERT语句中的值。
- 使用REPLACE INTO ...语法。
REPLACE INTO
语句首先尝试插入记录,如果找到重复键,它将删除旧记录并插入新记录。
例如:
REPLACE INTO students (id, name) VALUES (1, 'Alice');
如果id
为1的记录已经存在,MySQL将删除旧记录,然后插入新记录。这将导致自动增长的ID可能会跳过一些编号。
注意:REPLACE INTO
语句和INSERT INTO ... ON DUPLICATE KEY UPDATE ...
语句的行为是不同的,REPLACE INTO
会删除旧的记录,而ON DUPLICATE KEY UPDATE
只会更新旧的记录。
评论已关闭