标签:
上文中讲到外键约束的作用,tblPerson表中的GenderId是外键,tblGender中的Id是主键。通过设置外键约束可以限制tblPerson中的GenderId的值限定在tblGender表中的Id的取值范围。如下表中所示tblGender中的数据:
Id Gender 1 Male 2 Female 3 Unknown
那么tblPerson表中的GenderId列的取值就只能是1、2、3
Id Name Email GenderId Address 1 John John@gmail.com 1 America 2 Boria Boria@msn.com 2 North America 3 Judy Judy@hpe.com 2 Japan 4 July July@yahoo.com 3 China
但是现在我们的问题是如果我们删除tblGender表中的Id为1的数据会如何呢?此时tblPerson表中的第一行John的性别没有可引用的性别。实际上,此时SQL Server是不会允许我们删除tblGender中的数据的。如我们执行 Delete From tblGender Where Id = 1我们会得到如下的报错:
Msg 547, Level 16, State 0, Line 2 The DELETE statement conflicted with the REFERENCE constraint "tblPerson_GenderId_FK". The conflict occurred in database "Sample", table "dbo.tblPerson", column ‘GenderId‘. The statement has been terminated.
此时我们通过图形化工具打开tblPerson表中的外键tblPerson_GenderId_FK 会看到在插入和更新(INSERT and UPDATE Specific)下的Delete Rule有4个选项可以选,他们分别是1)No Action 2)Cascade 3)Set Null 4)Set Default
下面我们详细介绍这四种选项的意思.
1)No Action:当删除主键表表中的记录时,外键表不做任何操作。这也是我们创建主外键约束时的默认选项,此时如果删除主键数据会导致异常发生。
2)Cascade:当删除主键表中的记录时,同时删除引用主键表中的外键表中对应的数据
3)Set Null:当删除主键表中的记录时,同时设置引用主键表中的外键表的对应数据的值为Null
4)Set Default:当删除主键表中的记录时,同时设置引用主键表中的外键表的对应数据的值为默认值
05 外键中的Cascading属性(Cascading referential integraty constraint)
标签:
原文地址:http://www.cnblogs.com/kuillldan/p/5103884.html