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 使用事件(Events)完成计划任务
May 24 MySQL
MySQL开启事务的方式
Jun 26 MySQL
Mysql数据库按时间点恢复实战记录
Jun 30 MySQL
MySQL系列之六 用户与授权
Jul 02 MySQL
MySQL空间数据存储及函数
Sep 25 MySQL
MySQL之select、distinct、limit的使用
Nov 11 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
Jan 22 MySQL
mysql 体系结构和存储引擎介绍
May 06 MySQL
mysql5.5中文乱码问题解决的有用方法
May 30 MySQL
分享很少见很有用的SQL功能CORRESPONDING
Aug 05 MySQL
Mysql如何查看是否使用到索引
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
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
Quasar Input:type="number" 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
react 生命周期实例分析
2020/05/18 Javascript
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
python进阶教程之异常处理
2014/08/30 Python
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
详解python中的数据类型和控制流
2019/08/08 Python
python多线程扫描端口(线程池)
2019/09/04 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
类、抽象类、接口的差异
2016/06/13 面试题
服装厂厂长职责
2013/12/16 职场文书
学校十一活动方案
2014/02/01 职场文书
销售冠军获奖感言
2014/02/03 职场文书
大学班级文化建设方案
2014/05/06 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
博士论文答辩开场白
2015/06/01 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
导游词之上海豫园
2019/10/24 职场文书
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL
Mysql 一主多从的部署
2022/05/20 MySQL