场景:
比如,有一张表,专门记录业务里的唯一数据记录,这张表里如果存在此唯一数据的记录就更新此行数据的某个字段,如果此唯一数据不存在,那么就添加一条最新数据。
一贯操作:如果不知道mysql有 ON DUPLICATE KEY UPDATE 这种操作的话,一般的做法都是先select此表,如果存在就update,不存在的话就insert数据 ,这样做在高并发的场景下,是两条sql,会大大增加数据库负担。
优化: ON DUPLICATE KEY UPDATE ,一条语句完成以上两步操作。
简单举例:比如,记录用户登陆的最后IP和时间
CREATE TABLE `last_login_log` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`ip_addr` varchar(255) DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO last_login_log (
username,
ip_addr,
update_time
)
VALUES
(
'菜鸟一号',
'192.122.4.4',
NOW()
) ON DUPLICATE KEY UPDATE update_time = now(), ip_addr = '192.122.4.6';
自己拿以上语句测试一下,多执行几遍观察
参考:https://blog.csdn.net/u014287775/article/details/80509775
https://www.cnblogs.com/zjdxr-up/p/8319982.html
https://www.cnblogs.com/rocky-AGE-24/p/7392641.html