

新闻资讯
技术学院答案:INSERT ON DUPLICATE KEY UPDATE 用于处理唯一键或主键冲突时执行更新操作。当插入数据存在冲突则更新指定字段,否则插入新记录,适用于存在则更新、不存在则插入的场景,如用户登录统计,需确保表上有唯一索引或主键,利用VALUES()获取插入值,可避免竞争条件并提升效率。
在 MySQL 中,INSERT ON DUPLICATE KEY UPDATE 是一种非常实用的语句,用于在插入数据时,如果遇到唯一键或主键冲突,就执行更新操作,而不是报错。这个功能特别适合处理“存在则更新,不存在则插入”的场景。
该语句的基本结构如下:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...) ON DUPLICATE KEY UPDATE column1 = VALUES(column1), column2 = VALUES(column2), ...;说明:
入新记录。假设有一个用户登录统计表:
CREATE TABLE user_stats ( user_id INT PRIMARY KEY, login_count INT DEFAULT 0, last_login DATETIME );我们希望每次用户登录时:
可以这样写:
INSERT INTO user_stats (user_id, login_count, last_login) VALUES (1001, 1, NOW()) ON DUPLICATE KEY UPDATE login_count = login_count + 1, last_login = NOW();第一次执行:插入 user_id=1001 的记录。
第二次执行:发现主键冲突,于是更新 login_count 和 last_login。
基本上就这些。只要表上有唯一约束,就可以安全使用 INSERT ON DUPLICATE KEY UPDATE 来简化逻辑。不复杂但容易忽略细节,比如 VALUES() 的用法。