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的join buffer原理
Apr 29 MySQL
MySQL中VARCHAR与CHAR格式数据的区别
May 26 MySQL
解决Navicat for Mysql连接报错1251的问题(连接失败)
May 27 MySQL
mysql外连接与内连接查询的不同之处
Jun 03 MySQL
mysql如何配置白名单访问
Jun 30 MySQL
SQL实现LeetCode(175.联合两表)
Aug 04 MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
Oct 16 MySQL
mysql下的max_allowed_packet参数设置详解
Feb 12 MySQL
MySQL学习之基础命令实操总结
Mar 19 MySQL
提高系统的吞吐量解决数据库重复写入问题
Apr 23 MySQL
MySQL外键约束(Foreign Key)案例详解
Jun 28 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 include_path设置技巧分享
2011/07/03 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
基于jquery编写的横向自适应幻灯片切换特效的实例代码
2013/08/06 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
Bootstrap简单表单显示学习笔记
2016/11/15 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
详解创建自定义的Angular Schematics
2018/06/06 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
在Django的通用视图中处理Context的方法
2015/07/21 Python
Django自定义manage命令实例代码
2018/02/11 Python
python中正则表达式的使用方法
2018/02/25 Python
如何用python整理附件
2018/05/13 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
Python如何使用input函数获取输入
2020/08/06 Python
python 自动识别并连接串口的实现
2021/01/19 Python
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
一个C/C++编程面试题
2013/11/10 面试题
校园招聘策划书
2014/01/09 职场文书
小型女装店的创业计划书
2014/01/09 职场文书
爱的奉献演讲稿
2014/09/10 职场文书
Nginx+Tomcat负载均衡集群的实现示例
2021/10/24 Servers
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫