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 时间类型的选择
Jun 05 MySQL
MySQL GRANT用户授权的实现
Jun 18 MySQL
Mysql数据库值的添加、修改、删除及清空操作实例
Jun 20 MySQL
Mysql中where与on的区别及何时使用详析
Aug 04 MySQL
浅谈MySQL之select优化方案
Aug 07 MySQL
MySQL 如何限制一张表的记录数
Sep 14 MySQL
MySQL中的引号和反引号的区别与用法详解
Oct 24 MySQL
Mysql分库分表之后主键处理的几种方法
Feb 15 MySQL
提高系统的吞吐量解决数据库重复写入问题
Apr 23 MySQL
深入理解MySQL中MVCC与BufferPool缓存机制
May 25 MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
Jun 14 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
PHP下escape解码函数的实现方法
2010/08/08 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
2012/04/09 PHP
处理单名多值表单的详解
2013/06/08 PHP
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
php简单中奖算法(实例)
2017/08/15 PHP
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
python基础知识小结之集合
2015/11/25 Python
OpenCV实现人脸识别
2017/04/07 Python
python 调用有道api接口的方法
2019/01/03 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
基于Python正确读取资源文件
2020/09/14 Python
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
医科大学生毕业的自我评价分享
2013/11/12 职场文书
会计应届生的自荐信
2013/12/13 职场文书
办公室岗位职责
2014/02/12 职场文书
新年晚会主持词
2014/03/24 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
社区活动策划方案
2014/08/21 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS
LeetCode189轮转数组python示例
2022/08/05 Python