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 逻辑备份与恢复测试的相关总结
May 14 MySQL
MySql存储过程之逻辑判断和条件控制
May 26 MySQL
Mysql实现主从配置和多主多从配置
Jun 02 MySQL
SQL实现LeetCode(196.删除重复邮箱)
Aug 07 MySQL
MySQL 服务和数据库管理
Nov 11 MySQL
MySQL数据库中varchar类型的数字比较大小的方法
Nov 17 MySQL
一文搞清楚MySQL count(*)、count(1)、count(col)区别
Mar 03 MySQL
MySQL之MyISAM存储引擎的非聚簇索引详解
Mar 03 MySQL
Golang连接并操作MySQL
Apr 14 MySQL
MySQL添加索引特点及优化问题
Jul 23 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
Sep 23 MySQL
Mysql的Table doesn't exist问题及解决
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
DOTA2 探索永无止境 玩家自创强悍插眼攻略
2020/04/20 DOTA
php日历[测试通过]
2008/03/27 PHP
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
php模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
浅析PHP中的UNICODE 编码与解码
2013/06/29 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
2014/09/16 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
jquery内置验证(validate)使用方法示例(表单验证)
2013/12/04 Javascript
jQuery 回车事件enter使用示例
2014/02/18 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
详解webpack介绍&安装&常用命令
2017/06/29 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
angular json对象push到数组中的方法
2018/02/27 Javascript
Vue表单控件绑定图文详解
2019/02/11 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
详解template标签用法(含vue中的用法总结)
2021/01/12 Vue.js
Python求均值,方差,标准差的实例
2019/06/29 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
static函数与普通函数有什么区别
2015/12/25 面试题
中年人生感言
2014/02/04 职场文书
收银出纳员岗位职责
2014/02/23 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
会计专业自荐信范文
2015/03/05 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
React 并发功能体验(前端的并发模式)
2021/07/01 Javascript
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python