05 外键中的Cascading属性(Cascading referential integraty constraint)

上文中讲到外键约束的作用,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    [email protected]    1        America
2    Boria    [email protected]    2        North America
3    Judy    [email protected]      2        Japan
4    July    [email protected]    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:当删除主键表中的记录时,同时设置引用主键表中的外键表的对应数据的值为默认值

时间: 2024-08-25 20:55:53

05 外键中的Cascading属性(Cascading referential integraty constraint)的相关文章

数据库开发——参照完整性——在外键中使用Delete on cascade选项

原文:数据库开发--参照完整性--在外键中使用Delete on cascade选项 原文: http://www.mssqltips.com/sqlservertip/2743/using-delete-cascade-option-for-foreign-keys/?utm_source=dailynewsletter&utm_medium=email&utm_content=headline&utm_campaign=2012731 参照完整性在设计数据库时需要重视,在我作为

django模型中, 外键字段使用to_filed属性 指定到所关联主表的某个字段

在django项目的开发过程中,在设计模型时一开始将主键设置成了一个自定义的字段,但是在创建搜索索引时却发现必须要存在一个id的字段,并且为主键(不知道是否是项目一开始就这样配置的原因), 但此时表结构已经整体固定下来,并且有外键关联到了这个自定义的的主键,整个后台视图逻辑也已经封装完成,如果主表的主键发生改变,那么外键所在的表就会默认关联到新的主键上,那个后台视图的改动就会非常麻烦,这时就需要使用外键字段中的to_field属性来指定所关联的主表的某个字段,而不会影响到原先的逻辑 demo如下

通过 jdbc 分析数据库中的表结构和主键外键

文章转自:http://ivan4126.blog.163.com/blog/static/20949109220137753214811/ 在某项目中用到了 hibernate ,大家都知道 hibernate 是 ORM 框架,他是有能力根据实体生成数据库表的.我们在单元测试的时候用到了 dbUnit ,dbUnit 可以帮助我们在测试前把数据库的测试数据准备好,然后我们就利用现成的数据库环境测试,测试完成后需将数据库中的所有数据清除(为了不影响其他的单元测试),然后接着下一个测试.虽然已经

EF--主外键关系导航属性

数据准备公司表Company和员工表Employee两张表创建主外键强关系,员工表Employee的Company_ID是公司表Company的外键,如下图所 解读主外键生成的实体特殊性 Company实体--主外键关系的话,EF生成的实体,主表Company实体有个子表Employee的集合,注意这个集合是virtual虚拟的 Employee实体--子表里面还有个主表Company的实例,引用属性,注意主表实体Company也是virtual虚拟的 导航属性是延迟查询 我们看到我们只查询公司

MySQL外键关联(创世纪新篇)

数据库外键 01.mysql> show create table country\G  02.*************************** 1. row ***************************  03.       Table: country  04.Create Table: CREATE TABLE `country` (  05.  `country_id` smallint(5) unsigned NOT NULL auto_increment,  06. 

SQL的主键和外键的作用

SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除. (4)更新主键记录时,同样有级联更新和拒绝执行的选择. 简而言之,SQL的主键和外键就是起约束作用. 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,

SQL主键&外键

SQL的主键和外键约束 SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除. (4)更新主键记录时,同样有级联更新和拒绝执行的选择. 简而言之,SQL的主键和外键就是起约束作用. 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学

SQL的主键和外键

SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除. (4)更新主键记录时,同样有级联更新和拒绝执行的选择. 简而言之,SQL的主键和外键就是起约束作用. 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,

sql-主键、外键、索引

SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除. (4)更新主键记录时,同样有级联更新和拒绝执行的选择. 简而言之,SQL的主键和外键就是起约束作用. 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,