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基础(一)
Apr 05 MySQL
MySQL安装后默认自带数据库的作用详解
Apr 27 MySQL
jdbc使用PreparedStatement批量插入数据的方法
Apr 27 MySQL
MySQL优化之如何写出高质量sql语句
May 17 MySQL
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
May 25 MySQL
MYSQL主从数据库同步备份配置的方法
May 26 MySQL
MySql 缓存查询原理与缓存监控和索引监控介绍
Jul 02 MySQL
MySQL 那些常见的错误设计规范,你都知道吗
Jul 16 MySQL
SQL实现LeetCode(175.联合两表)
Aug 04 MySQL
MySQL表锁、行锁、排它锁及共享锁的使用详解
Apr 02 MySQL
mysql使用 not int 子查询隐含陷阱
Apr 12 MySQL
MySQL 原理优化之Group By的优化技巧
Aug 14 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
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
Yii使用技巧大汇总
2015/12/29 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
拉动滚动条加载数据的jquery代码
2012/05/03 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
react-router实现按需加载
2017/05/09 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
python负载均衡的简单实现方法
2018/02/04 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
numpy向空的二维数组中添加元素的方法
2018/11/01 Python
python程序 创建多线程过程详解
2019/09/23 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
python实现五子棋程序
2020/04/24 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
德国家具折扣店:POCO
2020/02/28 全球购物
社团招新策划书
2014/02/04 职场文书
预备党员表决心书
2014/03/11 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
2016年少先队活动总结
2016/04/06 职场文书
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
4种方法python批量修改替换列表中元素
2022/04/07 Python