zoukankan      html  css  js  c++  java
  • ON DUPLICATE KEY UPDATE,唯一索引或者主键插入重复修改记录

    解决的问题:

    唯一索引或者主键插入重复修改记录

    表结构如下,name有唯一索引,主键是 id

    CREATE TABLE `unique_key_test` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) DEFAULT NULL,
      `score` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `name` (`name`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

    插入数据,执行第二次重复插入,报错

    INSERT INTO `unique_key_test` (`id`, `name`, `score`) VALUES ('1', '张三', '7');

    [SQL]INSERT INTO `juc_test`.`unique_key_test` (`id`, `name`, `score`) VALUES ('1', '张三', '1')

    [Err] 1062 - Duplicate entry '1' for key 'PRIMARY'

    场景1:如果数据是导入的,id作为标识可以重复导入。有更新就更新,正常我们可能需要先查询后插入了。但是这个时候可以用到 ON DUPLICATE KEY UPDATE

    INSERT INTO `juc_test`.`unique_key_test` (`id`, `name`, `score`) VALUES ('1', '张三', '1')
    ON DUPLICATE KEY UPDATE id = '1', score = '8' ;


    受影响的行: 2
    时间: 0.012s

    场景2:如果name作为唯一条件,或者多个条件作为唯一条件,即唯一索引。比如我们用户信息三要素(姓名、身份证号、手机号)要作为唯一索引

    INSERT INTO `unique_key_test` (`id`, `idcard`, `name`, `score`) VALUES ('2', '211', '张三', '8')
    ON DUPLICATE KEY UPDATE idcard = '211', name='张三', score = '3' ;


    受影响的行: 2
    时间: 0.043s

    扩展

    当插入多条数据,其中不只有表中已存在的,还有需要新插入的数据

  • 相关阅读:
    wmq的A×B Problem
    MATLAB 求系统的单位冲击响应及单位阶跃响应
    关于共享率过低的一些事
    Vue组件之间的通信
    浏览器支持ES6的import和export
    Vue axios拦截问题
    开屏倒计时
    git常用操作
    原型
    this指向问题
  • 原文地址:https://www.cnblogs.com/liran123/p/14500204.html
Copyright © 2011-2022 走看看