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 相关文章推荐
JDBC连接的六步实例代码(与mysql连接)
May 12 MySQL
MySQL 存储过程的优缺点分析
May 20 MySQL
Mysql Online DDL的使用详解
May 20 MySQL
MySQL 使用事件(Events)完成计划任务
May 24 MySQL
Mysql 如何查询时间段交集
Jun 08 MySQL
MySQL 四种连接和多表查询详解
Jul 16 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
mysql中int(3)和int(10)的数值范围是否相同
Oct 16 MySQL
关于MySQL中的 like操作符详情
Nov 17 MySQL
如何避免mysql启动时错误及sock文件作用分析
Jan 22 MySQL
MySql分区类型及创建分区的方法
Apr 13 MySQL
浅谈MySql update会锁定哪些范围的数据
Jun 25 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/06/09 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
PHP上传文件及图片到七牛的方法
2018/07/25 PHP
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
2015/07/17 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
javascript定时器取消定时器及优化方法
2017/07/08 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
python面试题之列表声明实例分析
2019/07/08 Python
python传到前端的数据,双引号被转义的问题
2020/04/03 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
函授毕业自我鉴定
2014/02/04 职场文书
销售提升方案
2014/06/07 职场文书
普通话宣传标语
2014/06/26 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
社团招新宣传语
2015/07/13 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技