设置表关系“级联”,“设置空”和“限制”是做什么的?

我想开始在一个新的项目中使用表关系。

一些Googlesearch后,我有两个表设置为InnoDB:

我想链接的关键是

– > users-> userid(primary) – > sessions-> userid(index)

在这个过程中唯一不能理解的是“On update”和“On delete”的不同设置

这里的选项是:

  • – (没有?)
  • 级联(???)
  • 设置为空(将所有内容设置为空?)
  • 没有行动(呃…)
  • 限制 (???)

我基本上希望会话中的数据被删除,当一个用户被完全删除这是因为会话将只被删除,当过期被检测到我的会话pipe理器…

所以,如果任何人都可以告诉我这些选项做什么,将不胜感激。

父级更改时, CASCADE将传播更改。 (如果删除一行,引用该行的约束表中的行也将被删除,等等)

当父行消失时, SET NULL将列值设置为NULL。

RESTRICT导致尝试删除父行失败。

编辑:你没有问他们,但SQL标准定义了另外两个动作: SET DEFAULTNO ACTION 。 在MySQL中, NO ACTION等同于RESTRICT 。 (在某些DBMS中, NO ACTION是延迟检查,但在MySQL中,所有检查都是立即执行的。)MySQLparsing器接受SET DEFAULT ,但InnoDB和NDB引擎都拒绝这些语句,所以SET DEFAULT实际上不能用于ON UPDATEON DELETE约束。

另外,请注意,级联外键操作不会激活MySQL中的触发器。

包含外键的表称为引用 子表 ,包含候选键的表称为引用 父表

设置NULL :删除父表行时,将列值设置为NULL

级联 :CASCADE将在父级更改时传播更改。 如果删除一行,那么引用该行的约束表中的行也将被删除 ,等等

RESTRICT :RESTRICT导致您无法删除给定的父行,如果存在引用该父行的值的子行。

没有行动 :没有行动和限制非常相似。 当在引用的表上执行UPDATE或DELETE语句时,DBMS将在语句执行结束时validation没有任何引用关系被违反 。 简而言之,如果父行删除更新,则无需担心。