mysql优化 ON DUPLICATE KEY UPDATE

场景:
比如,有一张表,专门记录业务里的唯一数据记录,这张表里如果存在此唯一数据的记录就更新此行数据的某个字段,如果此唯一数据不存在,那么就添加一条最新数据。

 

一贯操作:如果不知道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

 

posted @ 2018-02-21 11:10  温柔的风  阅读(3510)  评论(0编辑  收藏  举报