分享

ON DUPLICATE KEY UPDATE,唯一索引或者主键插入重复修改记录

 新进小设计 2022-11-09 发布于北京

解决的问题:

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

表结构如下,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

 

扩展

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多