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 EXPLAIN输出列的详细解释
May 12 MySQL
MySQL 百万级数据的4种查询优化方式
Jun 07 MySQL
MySQL的安装与配置详细教程
Jun 26 MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 MySQL
MySQL之select、distinct、limit的使用
Nov 11 MySQL
MySQL窗口函数的具体使用
Nov 17 MySQL
彻底解决MySQL使用中文乱码的方法
Jan 22 MySQL
mysql的Buffer Pool存储及原理
Apr 02 MySQL
MySQL中一条SQL查询语句是如何执行的
Apr 08 MySQL
详解Mysq MVCC多版本的并发控制
Apr 29 MySQL
MySQL查询日期时间
May 15 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
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
PHP目录操作实例总结
2016/09/27 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
vue实现pdf文档在线预览功能
2019/11/26 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
web.py 十分钟创建简易博客实现代码
2016/04/22 Python
python分析作业提交情况
2017/11/22 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
如何利用find命令查找文件
2016/11/18 面试题
护理工作感言
2014/01/16 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
会计试用期自我评价
2014/09/19 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server