• 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

  • 相关阅读:
    Java常用的函数式接口
    Java网络编程的使用
    Java 多线程的使用
    VB.NET_DBUtil
    java 文件操作与IO流的常用方法
    JAVA Excel.xlsx 上传于下载
    java测试类
    Java11 HashMap源码分析(一、文档翻译)
    Canal实现Redis缓存实时更新(二)
    Canal实现Redis缓存实时更新(一)
  • 原文地址:https://www.cnblogs.com/wt645631686/p/8456361.html
Copyright © 2020-2023  润新知