【发布时间】:2014-01-04 07:59:44
【问题描述】:
谁能告诉我CASCADE 和RESTRICT 到底是什么意思?
它在受 DDL 部分约束的数据库系统中
如果我没有在我的ON DELETE 声明中写下它们怎么办?
【问题讨论】:
谁能告诉我CASCADE 和RESTRICT 到底是什么意思?
它在受 DDL 部分约束的数据库系统中
如果我没有在我的ON DELETE 声明中写下它们怎么办?
【问题讨论】:
ON DELETE CASCADE 和 ON DELETE RESTRICT 是外键属性,您在创建两个表之间的关系时设置它们。
如果您将关系设置为ON DELETE CASCADE,当您在“父”表上运行DELETE 语句时,它将自动DELETE“子”表中的所有相应行。但是RESTRICT(这是默认的外键关系行为)是当您尝试从“父”表中删除一行并且“子”表中存在具有相同ID的行时,它会失败,抱怨关于现有的子行。
无论哪种方式,您都无需在 DELETE 子句中提及任何内容。
我还写了一篇关于DELETE 和UPDATE 命令的不同规则的博文,在这里更详细地介绍了:
【讨论】:
ON DELETE NO ACTION(在某些 RDBMS 上与 ON DELETE RESTRICT 同义)是默认操作,因此没有必要编写它。当然你仍然可以删除孩子,你只需要在DELETE FROM parent_table之前明确地使用额外的DELETE FROM child_table,我认为这是最好的方法。
正确,因此这些 ON DELETE 和 ON UPDATE 适用于父表/行。 NO ACTION 和 RESTRICT 是同一件事的原因是,如果父母不存在,您就不能与孩子和父母建立关系。
【讨论】:
与外键关联的on delete有3种类型
【讨论】: