Mysql中 unique列插入重复值该怎么解决呢


Posted in MySQL onMay 26, 2021

当unique列在一个UNIQUE键上插入包含重复值的记录时,我们可以控制MySQL如何处理这种情况:使用IGNORE关键字或者ON DUPLICATE KEY UPDATE子句跳过INSERT、中断操作或者更新旧记录为新值。

mysql> create table menus(id tinyint(4) not null auto_increment, 
  -> label varchar(10) null,url varchar(20) null,unique key(id)); 
Query OK, 0 rows affected (0.13 sec) 
mysql> insert into menus(label,url) values('Home','home.html'); 
Query OK, 1 row affected (0.06 sec) 
mysql> insert into menus(label,url) values('About us','aboutus.html'); 
Query OK, 1 row affected (0.05 sec) 
mysql> insert into menus(label,url) values('Services','services.html'); 
Query OK, 1 row affected (0.05 sec) 
mysql> insert into menus(label,url) values('Feedback','feedback.html'); 
Query OK, 1 row affected (0.05 sec) 
mysql> select * from menus; 
+----+----------+---------------+ 
| id | label  | url     | 
+----+----------+---------------+ 
| 1 | Home  | home.html  | 
| 2 | About us | aboutus.html | 
| 3 | Services | services.html | 
| 4 | Feedback | feedback.html | 
+----+----------+---------------+ 
4 rows in set (0.00 sec)

如果现在在unique列插入一条违背唯一约束的记录,MySQL会中断操作,提示出错:

mysql> insert into menus(id,label,url) values(4,'Contact us','contactus.html'); 
ERROR 1062 (23000): Duplicate entry '4' for key 'id'

在前面的INSERT语句添加IGNORE关键字时,如果认为语句违背了唯一约束,MySQL甚至不会尝试去执行这条语句,因此,下面的语句不会返回错误:

mysql> insert ignore into menus(id,label,url) values(4,'Contact us','contactus.html'); 
Query OK, 0 rows affected (0.00 sec) 
mysql> select * from menus; 
+----+----------+---------------+ 
| id | label  | url     | 
+----+----------+---------------+ 
| 1 | Home  | home.html  | 
| 2 | About us | aboutus.html | 
| 3 | Services | services.html | 
| 4 | Feedback | feedback.html | 
+----+----------+---------------+ 
4 rows in set (0.00 sec)

当有很多的INSERT语句需要被顺序地执行时,IGNORE关键字就使操作变得很方便。使用它可以保证不管哪一个INSERT包含了重复的键值,MySQL都回跳过它(而不是放弃全部操作)。

在这种情况下,我们还可以通过添加MySQL4.1新增加的ON DUPLICATE KEY UPDATE子句,使MySQL自动把INSERT操作转换为UPDATE操作。这个子句必须具有需要更新的字段列表,这个列表和UPDATE语句使用的列表相同。

mysql> insert into menus(id,label,url) values(4,'Contact us','contactus.html') 
  -> on duplicate key update label='Contact us',url='contactus.html'; 
Query OK, 2 rows affected (0.05 sec)

在这种情况下,如果MySQL发现表已经包含具有相同唯一键的记录,它会自动更新旧的记录为ON DUPLICATE KEY UPDATE从句中指定的新值:

mysql> select * from menus; 
+----+------------+----------------+ 
| id | label   | url      | 
+----+------------+----------------+ 
| 1 | Home   | home.html   | 
| 2 | About us | aboutus.html | 
| 3 | Services | services.html | 
| 4 | Contact us | contactus.html | 
+----+------------+----------------+ 
4 rows in set (0.01 sec)

以上内容是小编给大家介绍的Mysql中 unique列插入重复值该怎么解决的全部教程,希望对大家有所帮助。

MySQL 相关文章推荐
Idea连接MySQL数据库出现中文乱码的问题
Apr 14 MySQL
JDBC连接的六步实例代码(与mysql连接)
May 12 MySQL
MySQL 百万级数据的4种查询优化方式
Jun 07 MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 MySQL
MySQL数据库超时设置配置的方法实例
Oct 15 MySQL
分享MySQL常用 内核 Debug 几种常见方法
Mar 17 MySQL
Mysql多层子查询示例代码(收藏夹案例)
Mar 31 MySQL
为什么MySQL不建议使用SELECT *
Apr 03 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
mysql中关键词exists的用法实例详解
Jun 10 MySQL
了解MySQL查询语句执行过程(5大组件)
Aug 14 MySQL
MySQL远程无法连接的一些常见原因总结
Sep 23 MySQL
MySQL查看表和清空表的常用命令总结
May 26 #MySQL
MySQL中distinct与group by之间的性能进行比较
MySQL中distinct和count(*)的使用方法比较
May 26 #MySQL
MySQL中出现乱码问题的终极解决宝典
如何设计高效合理的MySQL查询语句
May 26 #MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 #MySQL
正确使用MySQL INSERT INTO语句
May 26 #MySQL
You might like
PHP的FTP学习(一)
2006/10/09 PHP
PHP HTML代码串截取代码
2008/12/29 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
Python基于Tkinter实现的记事本实例
2015/06/17 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
Python绘制3D图形
2018/05/03 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
对Django url的几种使用方式详解
2019/08/06 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
Python基于pandas绘制散点图矩阵代码实例
2020/06/04 Python
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
计算机网络及管理学专业求职信
2014/06/05 职场文书
2014年药房工作总结
2014/11/22 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
永远是春天观后感
2015/06/12 职场文书
Python 循环读取数据内存不足的解决方案
2021/05/25 Python