请问,在SQL Service中,唯一约束是怎么运行的? 请看下面的代码
create table t ( t1 int identity(1,1), t2 char(1) ) create table s ( s1 int identity(1,1), s2 char(5) constraint uk_s2 unique )
insert into t values('a') insert into t values('ga') insert into t values('c') insert into s values('aa') insert into s values('bb') insert into s values('aa') insert into s values('cc') insert into s values('dd') select * from s select * from t 在查询的结果中 t表 1 a 2 c s 表 1 aa 2 bb 4 cc 5 dd 问题出来了 我运行 insert 语句的时候,唯一约束是什么时候运行的? 在向t表insert的时候,当插入的字符串超出设定的长度的时候,插入失败,自动增长的标识列没有增长,语句Rollback 在向s表insert的时候,当插入的字符串重复的时候,插入失败,但自动增长的标识列却自动增长了,语句没有全部回滚 以上现象在 check 约束的方面的表现的唯一约束的表现一样 我认为: 当运行 insert语句的时候,首先检查插入的数据是否违反了字段的长度,类型等条件,如果不违反,数据则暂时插入表成功,然后再检查表中的数据违反了该表的约束,如违反了约束,则删除该行记录,如不违反,则数据插入成功.
|