`

浅谈unique列上插入重复值的MySQL解决方案

阅读更多

本文的unique列上插入重复值解决方案,主要基于MySQL平台。通过这些,可以做到一些新的功能和应用。希望本文能对大家有所帮助。

当unique列在一个UNIQUE键上插入包含重复值的记录时,我们可以控制MySQL如何处理这种情况:使用IGNORE关键字或者ON DUPLICATE KEY UPDATE子句跳过INSERT、中断操作或者更新旧记录为新值。

  1. mysql> create table menus(id tinyint(4) not null auto_increment,  
  2.    -> label varchar(10) null,url varchar(20) null,unique key(id));  
  3. Query OK, 0 rows affected (0.13 sec)  
  4. mysql> insert into menus(label,url) values('Home','home.html');  
  5. Query OK, 1 row affected (0.06 sec)  
  6. mysql> insert into menus(label,url) values('About us','aboutus.html');  
  7. Query OK, 1 row affected (0.05 sec)  
  8. mysql> insert into menus(label,url) values('Services','services.html');  
  9. Query OK, 1 row affected (0.05 sec)  
  10. mysql> insert into menus(label,url) values('Feedback','feedback.html');  
  11. Query OK, 1 row affected (0.05 sec) 
  1. mysql> select * from menus;  
  2. +----+----------+---------------+  
  3. | id | label   | url          |  
  4. +----+----------+---------------+  
  5. | 1 | Home    | home.html    |  
  6. | 2 | About us | aboutus.html |  
  7. | 3 | Services | services.html |  
  8. | 4 | Feedback | feedback.html |  
  9. +----+----------+---------------+  
  10. rows in set (0.00 sec) 

如果现在在unique列插入一条违背唯一约束的记录,MySQL会中断操作,提示出错:

  1. mysql> insert into menus(id,label,url) values(4,'Contact us','contactus.html');  
  2. ERROR 1062 (23000): Duplicate entry '4' for key 'id' 

在前面的INSERT语句添加IGNORE关键字时,如果认为语句违背了唯一约束,MySQL甚至不会尝试去执行这条语句,因此,下面的语句不会返回错误:

  1. mysql> insert ignore into menus(id,label,url) values(4,'Contact us','contactus.html');  
  2. Query OK, 0 rows affected (0.00 sec)  
  3. mysql> select * from menus;  
  4. +----+----------+---------------+  
  5. | id | label   | url          |  
  6. +----+----------+---------------+  
  7. | 1 | Home    | home.html    |  
  8. | 2 | About us | aboutus.html |  
  9. | 3 | Services | services.html |  
  10. | 4 | Feedback | feedback.html |  
  11. +----+----------+---------------+  
  12. rows in set (0.00 sec) 

当有很多的INSERT语句需要被顺序地执行时,IGNORE关键字就使操作变得很方便。使用它可以保证不管哪一个INSERT包含了重复的键值,MySQL都回跳过它(而不是放弃全部操作)。

在这种情况下,我们还可以通过添加MySQL4.1新增加的ON DUPLICATE KEY UPDATE子句,使MySQL自动把INSERT操作转换为UPDATE操作。这个子句必须具有需要更新的字段列表,这个列表和UPDATE语句使用的列表相同。

  1. mysql> insert into menus(id,label,url) values(4,'Contact us','contactus.html')  
  2.    -> on duplicate key update label='Contact us',url='contactus.html';  
  3. Query OK, 2 rows affected (0.05 sec) 

在这种情况下,如果MySQL发现表已经包含具有相同唯一键的记录,它会自动更新旧的记录为ON DUPLICATE KEY UPDATE从句中指定的新值:

  1. mysql> select * from menus;  
  2. +----+------------+----------------+  
  3. | id | label     | url           |  
  4. +----+------------+----------------+  
  5. | 1 | Home      | home.html     |  
  6. | 2 | About us  | aboutus.html  |  
  7. | 3 | Services  | services.html |  
  8. | 4 | Contact us | contactus.html |  
  9. +----+------------+----------------+  
  10. rows in set (0.01 sec) 
分享到:
评论

相关推荐

    MySQL唯一索引重复插入数据解决方案总结.docx

    当我们创建好唯一索引之后,如果给索引列插入了重复值之后,MySQL 会报一个 Duplicate entry 的错误信息。例如,insert into userinfo(nickname, openid) VALUE (ENCRYPT(RAND() * 1000), 'jf/IxWYA060PA'); 会报错 ...

    Mysql数据库从入门到精通.rar

    1.mysql 备份数据 2.Mysql 更新数据 3.MySQL常用操作命令 4.MySQL的数据类型和建库策略详解 ...11.浅谈unique列上插入重复值的MySQL解决方案 12.深入了解MySQL 5.5分区功能增强.doc 13.在MySQL中操作日期和时间

    Mysql中 unique列插入重复值该怎么解决呢

    当你试图在`UNIQUE`列上插入已存在的值时,MySQL会抛出一个错误,阻止该操作。然而,有几种方法可以处理这种插入重复值的情况。 首先,我们可以使用`IGNORE`关键字。在`INSERT`语句前添加`IGNORE`,MySQL将忽略违反...

    MySQL使用UNIQUE实现数据不重复插入

    当我们试图在具有UNIQUE约束的列上插入重复值时,MySQL会抛出错误。然而,通过使用`IGNORE`关键字或`ON DUPLICATE KEY UPDATE`子句,我们可以对这种情况下发生的行为进行控制。 1. `IGNORE`关键字:在`INSERT ...

    sqlite避免重复插入数据

    综上所述,在 SQLite 中避免重复数据插入主要依赖于 **UNIQUE** 约束以及 **ON CONFLICT** 子句的不同选项。正确使用这些特性不仅可以提高数据的一致性和完整性,还可以简化应用程序的逻辑,提高整体的用户体验。

    MySQL删除重复记录

    一旦执行了上述命令,如果再次尝试插入一个`name`字段值相同的记录,MySQL将会拒绝这个操作,从而避免了重复记录的产生。 #### 方法二:使用LOAD DATA INFILE语句的REPLACE选项 当需要从外部文件导入数据到MySQL...

    Django2+ MySQL8 数据插入和查询

    总的来说,Django2与MySQL8的结合为Web开发提供了一个强大且高效的解决方案。通过Django的ORM,我们可以轻松地处理数据的CRUD(创建、读取、更新和删除)操作,同时享受到MySQL8在数据库性能和稳定性上的优势。

    MySQL 查询重复内容只显示一条

    1. **重复数据的定义**:在数据库中,如果某个表的某些列值完全相同,我们称这些记录为重复数据。例如,一个用户表中可能存在多个具有相同姓名和电子邮件地址的记录。 2. **查找重复数据**:要找出表中的重复数据,...

    防止mysql重复插入记录的方法

    如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: 代码如下: 代码如下:INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES (‘test9@163.com’, ‘99999...

    MySQL 处理插入过程中的主键唯一键重复值的解决方法

    在MySQL数据库中,处理插入数据时遇到主键或唯一键重复的问题有多种策略。本文将详细讲解三种方法:IGNORE、ON DUPLICATE KEY UPDATE和REPLACE,它们都能有效地避免因键重复而导致的插入失败。 1. **IGNORE关键字**...

    提高mysql插入数据的速度.pdf

    在MySQL数据库中,插入数据的速度是衡量数据库性能的关键指标之一。为了提高数据插入的效率,可以采取多种技术手段和优化策略。文档中提到的多种方法可以归纳为以下几类知识点: 1. 利用MySQL的批量插入功能: - ...

    用Distinct在MySQL中查询多条不重复记录值,绝对的物有所值

    今天,我们将深入探讨如何使用`DISTINCT`关键字在MySQL中查询多条不重复记录值,这不仅是一种实用技能,也是提升数据处理效率的关键所在。 ### `DISTINCT`关键字详解 `DISTINCT`关键字在SQL查询中扮演着一个至关...

    MySQL建立唯一索引实现插入重复自动更新

    在MySQL中,"唯一索引"是一种特殊的索引类型,它确保了索引列中的每个值都是唯一的,不允许出现重复。这样的索引对于保证数据的唯一性和完整性至关重要,特别是在需要避免数据冗余和冲突的情况下。本文将详细介绍...

    MySql避免重复插入记录的几种方法

    如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: 代码如下: INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES (‘test9@163.com’, ‘99999’, ...

    深入浅出MySQL数据库1

    ### 深入浅出MySQL数据库1 #### 1. 什么是数据库? 数据库(Database)是一种按照特定数据结构来组织、存储和管理数据的仓库。它不仅存储数据本身,还包括了与这些数据相关的各种元数据(例如数据的类型、长度等)...

    mysql 增加列语句

    在MySQL数据库管理系统中,增加列(也称为添加字段)是常见的数据表结构调整操作。这通常在需要为现有数据表添加新属性或信息时进行。在本篇内容中,我们将深入探讨如何使用SQL语句在MySQL中增加列,并结合源码和...

    MySQL数据库考试试题及答案-34页

    UNIQUE 索引用于保证各行在该索引上的值都不得重复。 12.事务处理 在 MySQL 中,COMMIT 语句用于将事务处理写到数据库中。 13.IS NOT NULL 运算符 IS NOT NULL 运算符用于判断记录中的某个字段是否为 NULL。 ...

Global site tag (gtag.js) - Google Analytics