关于脏读与唯一约束

原创 2016年07月25日 15:35:00

SQL Server 2012

案例:

Create Table dbo.Test

(ID INT Identity,Num INT,UqNo INT);

Alter Table Test Add Constraint PK_Test Primary Key (ID);

Create Unique Index IX_Test_UqNo On Test (UqNo);


Process 1:

 Insert dbo.Test (Num,UqNo) Values (100,100);

 Insert dbo.Test (Num,UqNo) Values (100,100);  --因为UqNo重复,所以最终是要报错的


Process 2:

 Select * From dbo.Test WITH (NOLOCK) Where Num=100; --可能得到2条记录


若 Process 2在 Process 1的第2个SQL发出后,且在其因为唯一索引约束报错前执行,

则会得到2条记录。比如Process 1的第2个SQL是 00:00:00.100 毫秒执行,在00:00:00.500毫秒报错,

当Process 2在 00:00:00.200毫秒执行,就能查询出2条记录


按此推理,数据写入过程:

写数据内存页->写索引内存页,若唯一索引重复,报错,就回滚数据内存页->写日志文件


感觉这处理得有点怪怪的。是不是该先检查数据正确(无违反唯一索引及其他约束等),再行写入?

主键、外键、唯一、约束区别

  • 2010年03月18日 07:52
  • 21KB
  • 下载

PowerDesigner怎样添加唯一约束

现有一个表student,id为主键。 现打算给name添加一个唯一约束。 双击打开这个表,点击“keys"选项卡,显示有一个key_1,这是id主键。 点击”insert a ...

PostgreSQL 逻辑删除的表的唯一约束的控制

很多时候,当我们的数据很重要,删除采用的是逻辑删除,仅仅是在记录上指定一个删除标记;这个时候,我们又需要该表的某一字段唯一(未删除的保持唯一,已经有删除标记的行不管),仅仅是采用数据库本身的check...

SQL Server 创建约束图解(索引,外键,主键,check,唯一)

SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束,今天使用SQL Server...
  • Aeroleo
  • Aeroleo
  • 2016年03月10日 12:45
  • 440

关于触发器对扩展表插入操作引发的违反主键的唯一约束条件

今天在写了一个行级update触发器,对表进行插入的时,触发触发器对扩展表做插入操作。遇到的问题不是一般的多。 1)在触发器的匿名块部分中用了 insert into tab_a(col_a1)  s...

唯一索引、主键、Unique约束

唯一索引、主键、Unique约束 1、定义 若当前有一张Admin表,如下: (1)唯一索引 若要为admin_id创建唯一索引,则语句为: Create [Unique] Inde...

ORACLE中主键约束跟唯一索引的区别

1、  分别用两种方法创建主键 create table test1(id number,name varchar2(10)); insert into test1 values(1,'t1');...

oracle查询表 索引、唯一约束、字段等相关信息

查询表的索引情况 select t.Index_Name,t.table_name,t.column_name,i.tablespace_name,i.uniqueness from user_...
  • cuker919
  • cuker919
  • 2013年10月17日 17:14
  • 10882
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于脏读与唯一约束
举报原因:
原因补充:

(最多只允许输入30个字)