MS
SQL服务中的约束是如何工作的?
请看下面的代码。
创建表t
(
t1 int identity(1,1),
T2 char(1)
)
创建表s
(
s1 int identity(1,1),
s2 char(5)约束uk_s2 unique
)
插入t值(' a ')
插入t值(' ga ')
插入t值(' c ')
插入s值(' aa ')
插入s值(' bb ')
插入s值(' aa ')
插入s值(' cc ')
插入s值(' DD ')
select * from s
select * from t
在查询结果中
t表
1 a 2 c表
s表
1a2b4cc5dd
这里有个问题
当我运行insert语句时,约束什么时候运行?
插入T表时,当插入的字符串超过设定长度时,插入失败,自动增加的标识列不增长。在S表中插入语句Rollback
时,当插入的字符串重复时,插入失败,但自动增加的标识列自动增长,所有语句不回滚。
上述现象在check约束方面的表现是一样的
。我认为:
在运行insert语句时,首先检查插入的数据是否违反了字段的长度、类型等条件。如果没有,数据会被临时插入到表中,然后检查表中的数据是否违反了表的约束。如果违反了约束,则删除该行记录。如果没有,数据将被成功插入。
0条评论