on update cascade 和on delete cascade 的区别

例:

CREATE TABLE customerinfo(
    customerid INT NOT NULL,
    PRIMARY KEY(customerid)  
)TYPE = INNODB;
CREATE TABLE orderinfo(
    orderid INT NOT NULL,
    customerid INT NOT NULL,
    PRIMARY KEY(customerid,orderid),
    FOREIGN KEY (customerid) REFERENCES customerinfo
    (customerid) ON DELETE CASCADE   
)TYPE = INNODB;

注意:‘ON DELETE CASCADE’,该参数保证当customerinfo表中的一条记录删除的话同时也会删除order。
表中的该用户的所有记录,注意使用外键时要定义数据库引擎为INNODB。

详解

当“UPDATE或” DELETE操作影响子表中具有匹配行的父表中的键值时,结果取决于该子句的 和子句 指定的引用动作。参照动作包括: ON UPDATEON DELETEFOREIGN KEY

CASCADE:从父表中删除或更新该行,并自动删除或更新子表中的匹配行。这两个ON DELETE CASCADE和ON UPDATE CASCADE 支持。在两个表之间,不要定义ON UPDATE CASCADE作用于父表或子表中同一列上的多个 子句。

如果一个FOREIGN KEY子句是一个外键关系这两个表定义,使得这两个表父子,一个ON UPDATE CASCADE或ON DELETE CASCADE 一个定义节FOREIGN KEY 子句必须为其他按顺序定义级联操作成功。如果 仅为一个子句定义一个ON UPDATE CASCADE或子句,则级联操作将失败并显示错误。 ON DELETE CASCADEFOREIGN KEY

级联的外键操作不会激活触发器。
 - SET NULL:从父表中删除或更新该行,并将子表中的一个或多个外键列设置为NULL。这两个 ON DELETE SET NULLON UPDATE SET NULL条款的支持。 
   如果指定SET NULL操作,请 确保未将子表中的列声明为NOT NULL- RESTRICT:拒绝父表的删除或更新操作。指定 RESTRICT(或NO ACTION)与省略ON DELETEorON UPDATE子句相同。
 - NO ACTION:标准SQL中的关键字。在MySQL中,等效于RESTRICT。如果引用表中有相关​​的外键值,则MySQL服务器会拒绝对父表的删除或更新操作。某些数据库系统具有延迟检查,并且NO  ACTION是延迟检查。在MySQL中,外键约束会立即检查,因此NO ACTION与相同RESTRICT- SET DEFAULT:MySQL解析器可以识别此操作,但是两者都可以, InnoDB并且 NDB拒绝包含ON DELETE SET DEFAULTor ON UPDATE SET DEFAULT子句的表定义。

对于支持外键的存储引擎,MySQL将拒绝任何INSERT或 UPDATE操作,如果有父表中没有匹配的候选键值试图创建一个子表的外键的值。

对于未指定的ON DELETE或ON UPDATE,默认操作始终为RESTRICT。

对于NDB表,ON UPDATE CASCADE在对父表的主键进行引用的情况下,不支持该表。

从NDB 7.5.14和NDB 7.6.10开始:对于子 NDB表,ON DELETE CASCADE如果子表包含一个或多个TEXTor BLOB类型的列,则不支持该表 。(缺陷#89511,错误#27484882)

InnoDB 在与外键约束相对应的索引记录上,使用深度优先搜索算法执行级联操作。
在存储生成列外键约束不能使用CASCADESET NULLSET DEFAULT作为ON UPDATE参照动作,也不能使用 SET NULLSET DEFAULT 作为ON DELETE参照动作。
在存储生成列的基本列外键约束不能使用CASCADESET NULLSET DEFAULT 作为ON UPDATEON DELETE引用操作。

一般情况下不推荐直接使用级联删除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值