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分库分表与分区的入门指南
Apr 22 MySQL
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
MySQL 数据类型选择原则
May 27 MySQL
解决Navicat for Mysql连接报错1251的问题(连接失败)
May 27 MySQL
MYSQL(电话号码,身份证)数据脱敏的实现
May 28 MySQL
SQL IDENTITY_INSERT作用案例详解
Aug 23 MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
Oct 16 MySQL
mysql使用instr达到in(字符串)的效果
Apr 03 MySQL
mysql 子查询的使用
Apr 28 MySQL
Mysql开启外网访问
May 15 MySQL
MySQL一劳永逸永久支持输入中文的方法实例
Aug 05 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
各种咖啡的英文名子是什么
2021/03/03 新手入门
php面向对象全攻略 (五) 封装性
2009/09/30 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
2015/05/12 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
浅析2种JavaScript继承方式
2015/12/04 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
vue数据双向绑定的注意点
2017/06/23 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
Python greenlet实现原理和使用示例
2014/09/24 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
Python中内建模块collections如何使用
2020/05/27 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
《囚绿记》教学反思
2014/03/01 职场文书
婚假请假条怎么写
2014/04/10 职场文书
股权转让协议书范本
2014/04/12 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
小学生勤俭节约演讲稿
2014/08/28 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
工程进度款催款函
2015/06/24 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js