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
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
ORM模型框架操作mysql数据库的方法
Jul 25 MySQL
SpringBoot连接MySQL获取数据写后端接口的操作方法
Nov 02 MySQL
MySQL常见优化方案汇总
Jan 18 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
MySQL数据库Innodb 引擎实现mvcc锁
May 06 MySQL
MySql按时,天,周,月进行数据统计
Aug 14 MySQL
MySQL使用IF语句及用case语句对条件并结果进行判断 
Sep 23 MySQL
mysql数据库如何转移到oracle
Dec 24 MySQL
关于MySQL中explain工具的使用
May 08 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
正则表达式语法
2006/10/09 Javascript
PHP chmod 函数与批量修改文件目录权限
2010/05/10 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
PHP使用pear自带的mail类库发邮件的方法
2015/07/08 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
基于jquery创建的一个图片、视频缓冲的效果样式插件
2012/08/28 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
2017/05/04 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
原生js实现省市区三级联动代码分享
2018/02/12 Javascript
详解vuex的简单使用
2018/03/12 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
React和Vue中监听变量变化的方法
2018/11/14 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python发送email的3种方法
2015/04/28 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
Python能做什么
2020/06/02 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
python中pow函数用法及功能说明
2020/12/04 Python
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
我们是伦敦女孩:WalG
2018/01/08 全球购物
会计电算化专业毕业生自荐信
2013/12/20 职场文书
公司委托书格式范文
2014/10/09 职场文书
党校个人总结
2015/03/04 职场文书
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js