`
youkimra
  • 浏览: 34675 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql 重复插入数值的问题

 
阅读更多

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

2009-11-02 07:00出处:51cto作者:佚名我要评论

[导读]本文将介绍在MySQL中unique列上插入重复值的解决方案,希望对广大数据库开发人员有所帮助。

  本文的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) 
<!--[1]-->
分享到:
评论

相关推荐

    MySQL DML - 插入数据.md

    4. **错误处理**:当插入的数据违反了表结构定义(如主键重复、外键约束等),MySQL会抛出错误。在开发过程中,需要适当处理这些错误。 #### 总结 通过上述介绍和示例,您应该已经掌握了如何使用MySQL的`INSERT ...

    利用mysql实现的雪花算法案例

    在这种背景下,如何生成全局唯一且不重复的ID成为了一个重要的问题。本文将详细介绍如何利用MySQL实现雪花算法,这是一种广泛应用于解决分布式ID生成的有效策略。 一、为何需要雪花算法 1. 分布式系统中的ID问题 ...

    康师傅mysql基础pdf

    4. **数据类型**: MySQL支持多种数据类型,如数值(INT, FLOAT, DECIMAL)、字符串(VARCHAR, CHAR)、日期和时间(DATE, TIME, DATETIME)、布尔值(BOOLEAN)等。 5. **索引**: 索引能加速数据查询。主键索引是...

    MYSQL常见问题及解答

    - **定义自动增长字段:** `AUTO_INCREMENT` 属性可以让 MySQL 在插入新记录时自动为字段分配一个唯一的数值。 - **示例:** ```sql CREATE TABLE example6 ( id INT PRIMARY KEY AUTO_INCREMENT, stu_id INT ...

    MySQL操作手册v1.0.pdf

    附录部分提供了MySQL中数据类型的详细说明,包括数值类型、日期和时间类型以及字符串类型。并发问题部分,手册则深入探讨了脏读、不可重复读、幻读以及第一类和第二类丢失更新的问题,并讨论了不同的隔离级别。 在...

    Mysql系统学习教程

    MySQL支持多种数据类型,如数值类型(INT、FLOAT、DOUBLE)、字符串类型(VARCHAR、CHAR、TEXT)、日期和时间类型(DATE、TIME、DATETIME)以及二进制类型(BLOB、VARBINARY)等。 4. **SQL语句**: SQL(结构化...

    MySQL数据库知识点总结.docx

    MySQL数据库知识点总结 MySQL 是一种关系型数据库管理系统(RDBMS),...3. MySQL 存储过程:存储过程是一种可以重复使用的代码块。 4. MySQL 触发器:触发器是一种自动执行的代码块,它可以在特定的事件发生时执行。

    joe_MySQL笔记

    - 插入的整数值超出范围时,MySQL会插入该类型的边界值。 - 若未指定整型字段的具体长度,MySQL会为其分配一个默认长度。 - **小数型**: 例如 `DECIMAL`, `FLOAT`, `DOUBLE` 等。 以上是MySQL中一些常用的操作和...

    mysql自增字段重排 mysql删除表后自增字段从1开始.pdf

    - 明确插入的数值必须是唯一的,否则会报错。如果插入的值大于当前最大值,自增序列将从这个新值开始递增,可以跳过某些编号。 - 更新自增列时,若值重复则报错,大于当前值则下一个编号从新值开始。 - `REPLACE`...

    mysql 数据表中查找重复记录

    在MySQL数据库管理中,有时我们需要找出数据表中的重复记录,以确保数据的准确性和一致性。在给定的标题和描述中,我们关注的核心知识点是如何使用SQL查询语句来定位并检索这些重复的数据。这里,我们将深入探讨这个...

    MYSQL培训经典教程

    3. 数据类型:MySQL支持多种数据类型,如数值类型(INT、FLOAT、DECIMAL等)、字符串类型(VARCHAR、TEXT)、日期时间类型(DATE、TIME、DATETIME等)。 二、安装与配置 1. MySQL安装:讲解如何在不同操作系统...

    MySQL必知必会(文字版).rar

    MySQL支持多种数据类型,如数值类型(整数、浮点数)、字符串类型(CHAR、VARCHAR)、日期和时间类型(DATE、TIME、DATETIME)、二进制类型(BLOB、TEXT)等,选择合适的数据类型对于存储和查询效率至关重要。...

    MySQL数据库常用的命令行教程

    `命令,可以从本地指定路径下的文本文件导入数据到person表中,注意文本文件中的数值需用tab键分隔。 ### 数据导出与导入 尽管文件中未详细描述最佳的MySQL数据导出与导入方式,但常见的方法包括: - **导出数据**...

    MySQL55题答案.pdf

    8. **InnoDB的事务隔离级别**:InnoDB支持四种隔离级别:READ UNCOMMITTED(读未提交)、READ COMMITTED(读已提交)、REPEATABLE READ(可重复读)和SERIALIZABLE(串行化)。这些级别控制了事务在并发环境下的可见...

    MySql面试题.doc

    以下是一些MySQL面试中的常见问题及其详细解答: 1. 数据库是什么? 数据库是一个用于存储和管理数据的系统,它允许组织、检索、更新和删除数据,确保数据的完整性和一致性。 2. 数据库的优点? - 方便检索:...

    逐步精通MySQL数据库(教学光盘)

    MySQL数据库是世界上最受欢迎的开源关系型数据库管理系统之一,尤其在Web开发领域中广泛使用。它以其高效、稳定和易于管理的特性...通过实践和不断的学习,你将能够在实际项目中灵活运用MySQL,解决各种数据库问题。

    mysql.rar_MYSQL

    - 数据库概念:MySQL是基于SQL(结构化查询语言)的数据库,用于存储和管理数据,支持多种数据类型,如数值、字符串、日期等。 - 关系模型:MySQL遵循关系数据库模型,通过表格形式组织数据,每个表格由列和行组成...

    小白mysql练习专用.rar

    3. **数据类型**:MySQL支持多种数据类型,如数值类型(INT、FLOAT、DOUBLE等)、字符串类型(VARCHAR、CHAR等)、日期和时间类型(DATE、TIME、DATETIME等)。选择合适的数据类型可以节省存储空间并提高查询效率。 ...

Global site tag (gtag.js) - Google Analytics