外键中RESTRICT的含义是什么?

时间:2016-07-05 14:57:19

标签: mysql sql foreign-keys

有4个案例:(例如我在谈论ON DELETE

  • CASCADE :引用行将与引用的行一起自动删除。
  • SET NULL :引用记录的值将自动与引用的值一起设置为NULL
  • NO ACTION :删除引用的行时,引用行不会有任何更改。
  • RESTRICT :{我无法理解其概念}

我为此阅读了documentation几次,但我仍然无法理解RESTRICT的作用。愿你有人通过一个例子解释一下吗?

我在某处读到NO ACTIONRESTRICT在MySQL中是相同的。这是真的吗?

4 个答案:

答案 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 |没有行动