如果是用主键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. 抽象工厂与工厂模式例子
  2. SSH远程会话管理工具 - screen使用教程
  3. 三层代码讲解--第一课
  4. 1.7 程序示例--多项式回归-机器学习笔记-斯坦福吴恩达教授
  5. 写给大家看的机器学习书【Part1】什么是机器学习?机器学到的到底是什么?
  6. 两个pdf怎么打开成两个窗口_如何将图片合并成PDF?教你两个免费方法
  7. 购票啦 | 2020中国.NET开发者峰会启动
  8. python基础教程博客_Python基础教程_Python入门知识
  9. Java基础-自增自减运算符练习题
  10. 怎么判断第几范式例题_学完就忘、做题就懵!初级会计怎么备考才能更高效?...
  11. 10个最新优秀手机应用界面设计实例
  12. icmp判断可达_伪造目标不可达的ICMP数据包
  13. 笔记本android vga输出,笔记本VGA接口基础知识普及
  14. Gartner 研讨会 “九问数字化转型” 会后感分享
  15. 如何给HTML文件加一张背景图,如何在css中添加背景图?
  16. 柔性电子 --基于碳纳米管的柔性压力传感器
  17. Java线程状态总结
  18. MapGuide应用程序示例——你好,MapGuide!
  19. 现代信号处理——平稳随机信号
  20. 周杰伦2015魔天伦2世界巡回演唱会各站曲目歌单(完结)

热门文章

  1. Android的原生态开发和非原生态开发
  2. Python mini-web框架框架开发01
  3. 毕业设计 基于zigbee的智能家居系统设计与实现
  4. 超级喜欢老罗,2016发布了新手机
  5. iOS最新打包发布流程
  6. windows下的Anaconda(三)深入了解Anaconda
  7. 山东科技大学OJ题库 1219 体重正常吗?
  8. Gradle flavor —— 打造不同风味的app
  9. 权值法实现五子棋AI
  10. npm install时出现npm ERR!