本文共 1967 字,大约阅读时间需要 6 分钟。
INSERT INTO ... ON DUPLICATE KEY UPDATE 是 MySQL 中专门用于处理插入操作中唯一键冲突的语法,MySQL独有功能,不是 SQL 标准语法。
该语法主要用于在插入数据时,检测到唯一索引(包括主键)冲突时,执行后续的更新操作,而不是直接报错或忽略。适用于需要在数据唯一性约束下进行数据插入和更新操作的场景。
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...) ON DUPLICATE KEY UPDATE column1 = value1, column2 = value2, ...;
说明:
需要注意的是:如果表中存在多个唯一索引,MySQL 会优先根据第一个存在冲突的唯一索引执行更新操作。
示例:向 t_user 表中插入一条新记录。
INSERT INTO t_user(user_name, age, height) VALUES("lisi", 17, 180) ON DUPLICATE KEY UPDATE age = 18;
示例:尝试插入已存在的用户信息,执行更新操作。
INSERT INTO t_user(user_name, age, height) VALUES("lisi", 17, 180) ON DUPLICATE KEY UPDATE age = 18;
示例:尝试插入已存在的用户信息,更新的字段值与原值相同。
INSERT INTO t_user(user_name, age, height, type) VALUES("lisi", 18, 180, 1) ON DUPLICATE KEY UPDATE age = 18;
当表中存在多个唯一索引时,MySQL 会优先根据第一个冲突的唯一索引执行更新操作。
VALUES() 函数可用于获取插入数据中的原值,常用于批量操作或动态更新场景。
INSERT INTO t_user(id, user_name, age, height, type) VALUES(2, "lisisi", 57, 480, 0) ON DUPLICATE KEY UPDATE age = VALUES(age) + 100;
批量插入数据时,可以使用 VALUES() 函数来更新冲突行的字段值。
INSERT INTO t_user(user_name, age, height, type) VALUES("lisi", 71, 701, 0),("lisisi", 72, 280, 1),("zhangsan", 73, 703, 0),("wangwu", 74, 704, null),("laoliu", 75, null, null) ON DUPLICATE KEY UPDATE user_name = VALUES(user_name),age = VALUES(age),height = VALUES(height),type = VALUES(type);
转载地址:http://gpdfk.baihongyu.com/