场景:
比如,有一张表,专门记录业务里的唯一数据记录,这张表里如果存在此唯一数据的记录就更新此行数据的某个字段,如果此唯一数据不存在,那么就添加一条最新数据。
一贯操作:如果不知道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