如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用:

  • insert ignore into

insert ignore into  (使用唯一索引再次插入相同的值会忽略提示*如果insert into 数据库会报错*,相同值不会插入但id指针会向后跳一位),这样当有重复记录就会忽略,执行后返回数字0。

例子:

insert ignore into table_name(a,b,c) values(1,2,3);
  • REPLACE

REPLACE的运行与INSERT很相像,但是如果旧记录与新记录有相同的值,则在新记录被插入之前,旧记录被删除,即:

尝试把新行插入到表中 
当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时: 
从表中删除含有重复关键字值的冲突行 
再次尝试把新行插入到表中 
旧记录与新记录有相同的值的判断标准就是:
表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。

返回值:
REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和
受影响的行数可以容易地确定是否REPLACE只添加了一行,或者是否REPLACE也替换了其它行:检查该数是否为1(添加)或更大(替换)。

模型:

REPLACE INTO `table_name`(`col_name`, ...) VALUES (...);
REPLACE INTO `table_name` (`col_name`, ...) SELECT ...;
REPLACE INTO `table_name` SET `col_name`='value',
  • ON DUPLICATE KEY UPDATE

对重复唯一索引的行数据,只更新修改ON DUPLICATE KEY UPDATE后面的参数值。

INSERT INTO `table_name` (`a`, `b`, `c`) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE `b`=VALUES (`b`),`c`=VALUES (`c); 

如果列b也是唯一列,则INSERT与此UPDATE语句相当:

UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;  

如果a=1 OR b=2与多个行向匹配,则只有一个行被更新。通常尽量避免对带有多个唯一关键字的表使用ON DUPLICATE KEY子句。

您可以在UPDATE子句中使用VALUES(col_name)函数从INSERT...UPDATE语句的INSERT部分引用列值。换句话说,如果没有发生重复关键字冲突,则UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的值。本函数特别适用于多行插入。VALUES()函数只在INSERT...UPDATE语句中有意义,其它时候会返回NULL。

示例:

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)  ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b); 

本语句与以下两个语句作用相同:

INSERT INTO table (a,b,c) VALUES (1,2,3)  ON DUPLICATE KEY UPDATE c=3;
INSERT INTO table (a,b,c) VALUES (4,5,6)  ON DUPLICATE KEY UPDATE c=9; 

当您使用ON DUPLICATE KEY UPDATE时,DELAYED选项被忽略。

mysql唯一索引冲突的解决方案相关推荐

  1. Mysql唯一索引 唯一约束

    Mysql唯一索引 唯一约束 唯一索引作为mysql众多索引常用的一种,在一次业务代码编写中详细了解了下此索引在此记载,如果错误地方还望同学们斧正 Mysql唯一索引 唯一约束 唯一索引的的作用 唯一 ...

  2. mysql 唯一索引出现重复数据_mysql使用唯一索引避免插入重复数据

    使用MySQL 索引防止一个表中的一列或者多列产生重复值 一:介绍MYSQL唯一索引 如果要强烈使一列或多列具有唯一性,通常使用PRIMARY KEY约束. 但是,每个表只能有一个主键. 因此,如果使 ...

  3. Mysql唯一索引和普通索引的区别,

    文章目录 Mysql唯一索引和普通索引的区别,那种速度快一点,原因是啥 理由说明: 结论: 1 普通索引 2 唯一索引 注意:唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(log ...

  4. 在mysql中unique唯一索引的作用_MySQL_MySQL中的唯一索引的简单学习教程,mysql 唯一索引UNIQUE一般用于不 - phpStudy...

    MySQL中的唯一索引的简单学习教程 mysql 唯一索引UNIQUE一般用于不重复数据字段了我们经常会在数据表中的id设置为唯一索引UNIQUE,下面我来介绍如何在mysql中使用唯一索引UNIQU ...

  5. java 唯一索引冲突_JPA merge联合唯一索引无效问题解决方案

    问题 JPA的merge()操作 是合并的意思,就是当保存的实体时,根据主键id划分,如果已存在,那么就是更新操作,如果不存在,就是新增操作 但是这个仅针对 主键id 划分,对联合唯一索引 无效,两次 ...

  6. MySQL 唯一索引 UNIQUE KEY 会导致死锁?

    唯一性索引unique影响: 唯一性索引表创建: DROP TABLE IF EXISTS `sc`; CREATE TABLE `sc` (`id` int(11) NOT NULL AUTO_IN ...

  7. mysql唯一索引弊端_MySQL 关于唯一索引和普通索引的抉择

    想象这样一个场景,在设计一张用户表时,每人的身份证号是唯一的,需要搜索.但由于身份证号字段较大,不好将其作为主键.在业务代码已经保证插入身份证唯一的情况下,可以选择建立唯一索引和普通普通索引,这时该如 ...

  8. 为什么 MySQL 唯一索引会导致死锁,“有心杀贼,无力回天”?

    >>号外:关注"Java精选"公众号,菜单栏->聚合->干货分享,回复关键词领取视频资料.开源项目. 唯一性索引unique影响 唯一性索引表创建 DROP ...

  9. 聊聊mysql唯一索引的哪些坑,为什么还是产生重复数据?

    前言 前段时间我踩过一个坑:在mysql8的一张innodb引擎的表中,加了唯一索引,但最后发现数据竟然还是重复了. 到底怎么回事呢? 本文通过一次踩坑经历,聊聊唯一索引,一些有意思的知识点. 1.还 ...

最新文章

  1. Django的下载与基本命令
  2. 腾讯云Linux云主机SSH远程连接
  3. 在条形图中对X轴进行排序
  4. selenium-如何多次循环某一个脚本
  5. html中的box布局,CSS3 Flexbox 布局完全指南(图解 Flexbox 布局详细教程)
  6. 17现代软件工程十五组第三次作业
  7. mysql ----DML(掌握)
  8. 中国焦磷酸四钾市场趋势报告、技术动态创新及市场预测
  9. 【翻译】Ext JS——高效的编码风格指南
  10. 小程序api 分享scene_抛弃微信小程序API的嵌套回调吧!
  11. 2021海口高考调研成绩查询,2021海口市地区高考成绩排名查询,海口市高考各高中成绩喜报榜单...
  12. CAD卸载不干净不能重新安装(恶心死我了)
  13. Centos下增加swap空间
  14. 使用 GitHub Actions 来构建应用程序
  15. TCP/IP协议,卷一第42页错误
  16. [原创]数独解答程序
  17. UCK区块链微课堂—数字货币钱包那么多,总有一款适合您!
  18. 【笔记】linux文件权限与目录配置
  19. eclipse不提示js怎么办
  20. SpringBoot配置文件的说明

热门文章

  1. Java获取当前时间前10分钟的时间
  2. 详解电池管理系统,这一篇就够了!
  3. liunx 安装adobe reader阅读器(转载)
  4. 寄托 圣三一学院计算机,圣三一学院(Trinity College)留学文书写作指南(2020版)...
  5. 问题解决:Java解压文件时报错:MALFORMED
  6. JavaFx vs Flash vs Silverlight
  7. *** was not found in ‘***‘
  8. 微信小程序基础知识点
  9. 还记得谷歌之前发现的两颗行星吗?今天谷歌对此披露了重要技术细节
  10. DRA的功能和局限性