sql外键约束NO ACTION,CASCADE,SET NULL,SET DEFAULT

NO ACTION
指定如果试图删除/修改某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 DELETE/UPDATE语句。

CASCADE、SET NULL 和 SET DEFAULT
允许通过删除或更新键值来影响指定具有外键关系的表,这些外键关系可追溯到在其中进行修改的表。如果为目标表也定义了级联引用操作,那么指定的级联操作也将应用于删除或更新的那些行。不能为具有 timestamp 列的外键或主键指定 CASCADE。

ON DELETE CASCADE
指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则也将删除所有包含那些外键的行。

ON UPDATE CASCADE
指定如果试图更新某一行中的键值,而该行的键值被其他表的现有行中的外键所引用,则组成外键的所有值也将更新到为该键指定的新值。 (如果 timestamp 列是外键或被引用键的一部分,则不能指定 CASCADE。 )

ON DELETE SET NULL
指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为 NULL。目标表的所有外键列必须可为空值,此约束才可执行。

ON DELETE SET DEFAULT
指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON DELETE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。

ON UPDATE SET DEFAULT
指定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON UPDATE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。

转载于:https://my.oschina.net/u/2672206/blog/686066

在MySQL中,外键约束可以通过不同的操作选项来处理与外键关联的行的更新或删除操作。下面是MySQL中常用的外键约束操作: 1. NO ACTION:默认选项。当有与外键关联的行被更新或删除时,NO ACTION选项会阻止这些操作,除非没有其他依赖于这些行的外键。如果其他表中存在与当前行有关联的外键,更新或删除操作将被拒绝。 2. CASCADECASCADE选项允许对与外键关联的行进行更新或删除操作,并自动将这些更改传播到引用该外键的其他表中。当你更新或删除与外键关联的行时,CASCADE选项会自动更新或删除引用该外键的其他表中相应的行。 3. SET NULL:当有与外键关联的行被更新时,SET NULL选项会将引用该外键的列设置为NULL。当有与外键关联的行被删除时,SET NULL选项会将引用该外键的列设置为NULL。 4. SET DEFAULT:类似于SET NULL,但是SET DEFAULT选项会将引用该外键的列设置为默认值,而不是NULL。 5. RESTRICT:RESTRICT选项与NO ACTION相似,当有与外键关联的行被更新或删除时,RESTRICT选项会阻止这些操作,除非没有其他依赖于这些行的外键。如果其他表中存在与当前行有关联的外键,更新或删除操作将被拒绝。 这些操作选项可以在创建外键约束时使用,例如: ```sql ALTER TABLE orders ADD FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON UPDATE CASCADE ON DELETE SET NULL; ``` 在上述示例中,外键约束指定了ON UPDATE CASCADE和ON DELETE SET NULL操作选项。这意味着当customers表中的customer_id被更新时,与之关联的orders表中的customer_id也会被更新。而当customers表中的customer_id被删除时,与之关联的orders表中的customer_id将被设置为NULL。 请注意,外键约束的操作选项可以根据具体的需求进行选择和组合使用。在设计数据库时,你应该根据业务需求和数据一致性要求选择适当的操作选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值