针对数据重复插入的情况,我们通常会在业务代码中进行处理,就是说入库的时候先查一遍有没有,没有记录的情况再准许入库。但是如果只是自己处理业务代码时先查后入库,并发高时会发生意想不到的后果。

比如现在表tab里有两个字段fa, fb。业务规定,fa和fb的值只能成对出现一次(好比1,2入库一次,就不能再有一条1,2的记录入库)。

当在自己的业务代码里处理避免再次入库时,会这样处理,

步骤一:select 1 from tab where fa = ? and fb = ?

步骤二:insert tab values (?, ?)

那么问题来了:当第一条记录来了,比如fa=1, fb=2。此时他通过了步骤一的检测,没有这条记录,于是来到了步骤二。就在此时,第二条记录又来了,而且又是一个fa=1, fb=2。好吧,第一条记录可能还没入库完呢,那第二条记录也可以通过了步骤一的检测,也来到了步骤二。。而这时,意想不到的事发生了。有两条一样的记录了。所以这种并发高了的情况发生就造成这样滴局面。

而如果在数据库层面进行限制就会完美解决这一个问题(当然业务上有上述需求的话,db做了限制外,最好自己的业务代码也要先查一下,再入库。发生了什么好做处理,比如查询的时候发现已经入库了,这时又什么业务策略。再有也可以通过数据库返回码,唯一约束时,db会抛出[Err] 1062的错误码)。。

一个表可以有多个唯一约束,一个约束可以只有一列,当然也可以有多列。  添加唯一索引的方法如下:

1

2ALTER TABLE tab ADD CONSTRAINT some_name UNIQUE (fa, fb)

如果在第一次建表时,加约束方法如下:

CREATE TABLE tab ( fa int NOT NULL, fb int NOT NULL, CONSTRAINT some_name UNIQUE (fa ,fb ) )

mysql用唯一约束避免重复_mysql中创建唯一约束防止数据重复相关推荐

  1. mysql中创建唯一索引的关键字_MySQL中创建唯一索引的关键字是_______ 。

    [判断题]判断零件键槽的尺寸标注是否正确.[图片] [单选题][图片] [单选题]读零件图,回答问题:1. C3表示倒角为( )度?2. C2表示倒角锥台高度为( )?[图片] [单选题]如图为套筒零 ...

  2. mysql中索引约束有哪些_Mysql中索引和约束的示例语句

    外键 查询一个表的主键是哪些表的外键 SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCE ...

  3. mysql 约束 和索引_Mysql中索引和约束的示例语句

    外键 查询一个表的主键是哪些表的外键 SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCE ...

  4. mysql 插入_Mysql中创建表格及插入数据

    学习笔记 [数据库相关概念] Q:什么是数据库和关系数据库. A:数据库是存储数据合集的"仓库".关系数据库是保存多张表和多张表之间的关系的数据库.关键字段将多张表"联结 ...

  5. oracle 唯一递增列,在oracle中创建unique唯一约束(单列和多列)

    oracle中的unique约束是用来保证表中的某一类,或者表中的某一类组合起来不重复的一种手段. 我们在可以在创建表时或者创建好后通过修改表的方式来创建oracle中的unique约束. 下面是一些 ...

  6. Excel 计算重复项中的唯一值的方法

    计算重复项中的唯一值 假设你想要了解包含重复值的范围中有多少个唯一值. 例如,如果列包含: 值 5.6.7 和 6,结果为三个唯一值 - 5.6 和 7. 值"Bradley".& ...

  7. java creat uid_关于uniqueidentifier:如何在Java中创建唯一ID?

    本问题已经有最佳答案,请猛点这里访问. 我正在寻找在Java中创建唯一ID作为String的最佳方法. 任何指导表示赞赏,谢谢. 我应该提到我正在使用Java 5. 看看这个stackoverflow ...

  8. 在MySql数据库中创建数据库dbjava,数据表book,字段包括bno,bname,price,count(编号、书名、单价、数量)。 利用JDBC连接数据库dbjava,实现数据表的增删 改查

    题目 1.在MySql数据库中创建数据库dbjava,数据表book,字段包括bno,bname,price,count(编号.书名.单价.数量). 2.利用JDBC连接数据库dbjava,实现数据表 ...

  9. mysql联合唯一约束_MySQL中添加唯一约束和联合唯一约束

    在MySQL数据库中,经常会碰到由于业务需要添加唯一键约束,唯一键约束,可以在一个列上添加约束,也可以在多个列上添加唯一约束. 一.单列唯一约束 在一列上添加唯一约束,主要是让该列在表中只能有唯一的一 ...

最新文章

  1. 使用python套用excel模板_集成python的excel插件模板pyaddin——使用说明
  2. 再谈MySQL JSON数据类型
  3. 如何对phpcms v9的首页列表进行分页?
  4. Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找
  5. Linux命令 iperf - 网络性能测试工具
  6. 盘点全球最美的15座数据中心
  7. Struts 动态Form的验证框架步骤
  8. 解决git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Pleas
  9. Rushcrm:CRM系统怎么让企业如此青睐?
  10. Laravel 队列发送邮件
  11. Linux嵌入式开发_设置时钟频率
  12. 属于db模式缺点的是什么_DB与ES混合之应用系统场景分析探讨
  13. k8s认证及ServiceAccount-十五
  14. eNsp 多区域OSPF配置
  15. 2022年,消费品牌如何把握新的商业脉络?
  16. 查询攻略,将多个退回延误的快递单号物流设置分类
  17. 【白皮书】用于过程工业的PROFINET
  18. STM32F40xx搭建Keil工程编译错误(stm32f4xx_fmc.c)
  19. 学好SEO需要掌握哪些知识要点?
  20. 展锐平台PIN码输错三次后提醒PUK输入

热门文章

  1. c++中介者模式mediator
  2. mybatis plus 事务管理器_[MyBatis]-02 环境搭建及配置文件详解
  3. Pandas及简单学习
  4. 删除unique key,删除原有的联合主键,新建新的联合逐渐,删除索引,修改索引,mysql5.7修改索引名称,查看最大连接数量,查看是否有ssl
  5. 使用Mapreduce案例编写用于统计文本中单词出现的次数的案例、mapreduce本地运行等,Combiner使用及其相关的知识,流量统计案例和流量总和以及流量排序案例,自定义Partitioner
  6. JPA(三)之实体关系一对多(多对一)
  7. 1.VMwareTools的安装,vmware启动的时候,虚拟机黑屏,解决办法
  8. 1高并发服务器:多路IO之select
  9. Opencms安装和配置
  10. 吃豆豆游戏的C语言程序码,C++实现基于控制台界面的吃豆子游戏