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 相关文章推荐
Mysql数据库命令大全
May 26 MySQL
详解MySQL中的主键与事务
May 27 MySQL
mysql 如何获取两个集合的交集/差集/并集
Jun 08 MySQL
分析mysql中一条SQL查询语句是如何执行的
Jun 21 MySQL
浅析MySQL如何实现事务隔离
Jun 26 MySQL
MySQL系列之十三 MySQL的复制
Jul 02 MySQL
MySQL外键约束(FOREIGN KEY)案例讲解
Aug 23 MySQL
一条慢SQL语句引发的改造之路
Mar 16 MySQL
MySql数据库触发器使用教程
Jun 01 MySQL
Mysql中@和@@符号的详细使用指南
Jun 05 MySQL
MySQL优化之慢日志查询
Jun 10 MySQL
mysql序号rownum行号实现方式
Dec 24 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
jquery插件之easing 动态菜单
2010/08/21 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
js调用图片隐藏&显示实现代码
2013/09/13 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
python中dir函数用法分析
2015/04/17 Python
Django实现组合搜索的方法示例
2018/01/23 Python
python二元表达式用法
2019/12/04 Python
浅析Python requests 模块
2020/10/09 Python
解决Python 写文件报错TypeError的问题
2020/10/23 Python
python 实现批量图片识别并翻译
2020/11/02 Python
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
精彩的大学生自我评价
2013/11/17 职场文书
手工社团活动方案
2014/02/17 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
五年级学生期末评语
2014/12/26 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
课题研究阶段性总结
2015/08/13 职场文书
2016教师国培研修感言
2015/12/08 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
Node与Python 双向通信的实现代码
2021/07/16 Javascript