有4个案例:(例如我在谈论ON DELETE
)
CASCADE
:引用行将与引用的行一起自动删除。SET NULL
:引用记录的值将自动与引用的值一起设置为NULL
。NO ACTION
:删除引用的行时,引用行不会有任何更改。RESTRICT
:{我无法理解其概念} 我为此阅读了documentation几次,但我仍然无法理解RESTRICT
的作用。愿你有人通过一个例子解释一下吗?
我在某处读到NO ACTION
和RESTRICT
在MySQL中是相同的。这是真的吗?
答案 0 :(得分:2)
RESTRICT:它不允许删除此(父)记录而不删除依赖记录(从中引用外键的记录)
父母
ID NAME
1 AAAA
2 BBBBB
child
ID PARENT_ID
1 1
2 1
3 2
ON DELETE CASCADE
IF WE DELETE AAA FROM parent it will delete 1 and 2 entries from child
on delete null
IF WE DELETE AAA FROM parent it will set 1 nad 2 PARENT_ID to null from child
on delete no action
IF WE DELETE AAA FROM parent it will delete but no action on child
答案 1 :(得分:2)
RESTRICT:拒绝父表的删除或更新操作。指定RESTRICT(或NO ACTION)与省略ON DELETE或ON UPDATE子句相同。
NO ACTION:标准SQL中的关键字。在MySQL中,相当于RESTRICT。如果引用的表中存在相关的外键值,则MySQL服务器拒绝父表的删除或更新操作。某些数据库系统具有延迟检查,NO ACTION是延迟检查。在MySQL中,立即检查外键约束,因此NO ACTION与RESTRICT相同。
答案 2 :(得分:1)
如果子表中存在记录,RESTRICT将不允许删除或更新父记录
答案 3 :(得分:-1)
你可以这样测试,
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option: 限制| CASCADE | SET NULL |没有行动