外键约束补充说明

外键约束补充说明

外键约束详解及术语释疑 参见:https://blog.csdn.net/cnds123/article/details/39827049

关系型数据库表之间的联系[关系] 参见 https://blog.csdn.net/cnds123/article/details/116276167

关系模型中关系的完整性约束 参见 https://blog.csdn.net/cnds123/article/details/114336832

 

引用完整性约束(外键约束)可以定义修改编辑(INSERT、DELETE、UPDATE操作)记录规则。

在创建表时(通过 CREATE TABLE 语句),或者在表创建之后(通过 ALTER TABLE 语句)在外键约束中使用{ON DELETE | ON UPDATE } { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ,可以定义修改记录规则。

 

外键约束简化版语法

[ADD CONSTRAINT 外键约束名]

FOREIGN KEY(外键列名) REFERENCES 主表(主表的主键列名)] 

[{ON DELETE | ON UPDATE } { NO ACTION | CASCADE | SET NULL | SET DEFAULT }]

 

建立外键约束后,DBMS将执行参照完整性检查和违约处理:

外键约束对子表的作用:

在子表上进行INSERT、UPDATE 操作的限制是,要和主表中的主键值匹配,或为NULL,否则不允许。

外键约束对父表的作用:

在父表上进行UPDATE、DELETE操作的限制,取决于在定义子表的外键时指定的ON UPDATE、ON DELETE子句。

 

ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT },若没有指定ON DELETE子句,默认拒绝执行(NO ACTION)。

ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT },若没有指定ON UPDATE子句,默认拒绝执行(NO ACTION)。

顺便指出,不同的DBMS支持的情况不尽相同。

 

ON DELETE子句各选项的作用:

①NO ACTION :删除主表记录,如果子表中有和主表匹配的记录,则不允许(产生一个错误提示)。

②CASCADE (级联):删除主表记录,也将删除子表中的匹配记录。

③SET NULL :删除主表记录,将子表中的匹配记录的外键值改为NULL。

④SET DEFAULT :删除主表记录,将子表中的匹配记录的外键值改为默认值。

 

ON UPDATE子句各选项的作用:

①NO ACTION :更新主表记录的主键值,如果子表中有和主表匹配的记录,则不允许(产生一个错误提示)。

②CASCADE :更新主表记录的主键值,子表中的匹配记录的外键值一起修改。

③SET NULL :更新主表记录的主键值,子表中的匹配记录的外键值改为NULL。

④SET DEFAULT :更新主表记录的主键值,子表中的匹配记录的外键值改为默认值。

 

外键约束通过主键(它所在的表即主表)和外键(它所在的表即子表)实现的,本文将主键值和外键值相等的记录称为匹配记录(或关联记录)。

 

参照完整性属于表间规则。对于相关的表,在更新、插入或删除记录时,如果只改其一不改其二,就可能影响数据的完整性:例如,删除父表的某记录后,子表的相应记录未删除,致使这些记录成为孤立记录;修改父表中对应列的值后,子表对应列的值未做相应改变;对于子表插入的记录,父表中没有对应列的值的记录;更改子表的外键值,父表中没有对应列的值的记录。

 

☆使用级联引用完整性约束例子

建立主表

CREATE TABLE Countries

  (CountryId INT PRIMARY KEY,

   CountryOutline char(30));

 

在从表中指定ON DELETE CASCADE

1、建立从表(子表)时指定ON DELETE CASCADE

CREATE TABLE Cities

   ( CityId INT PRIMARY KEY,

     CityOutline char(50),

    CountryId INT REFERENCES Countries(CountryId) ON DELETE CASCADE);

 

2、若建立从表时未指定ON DELETE CASCADE,可以用如下语句添加之

ALTER TABLE  Cities

   ADD CONSTRAINT fk_consName

   REFERENCES Countries(CountryId) ON DELETE CASCADE;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值