例:
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 NULL和ON 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 在与外键约束相对应的索引记录上,使用深度优先搜索算法执行级联操作。
在存储生成列外键约束不能使用CASCADE,SET NULL或SET DEFAULT作为ON UPDATE参照动作,也不能使用 SET NULL或SET DEFAULT 作为ON DELETE参照动作。
在存储生成列的基本列外键约束不能使用CASCADE, SET NULL或SET DEFAULT 作为ON UPDATE或ON DELETE引用操作。
一般情况下不推荐直接使用级联删除