一尘不染

设置表关系“ Cascade”,“ Set Null”和“ Restrict”做什么?

mysql

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

经过一番搜索之后,我将2个表设置为InnoDB:

我要链接的键是

->用户->用户ID(主要)->会话->用户ID(索引)

在此过程中,我唯一不了解的是“更新时”和“删除时”的不同设置做了什么

这里的选项是:

  • - (没有?)
  • 级联(???)
  • 设置为空(将所有内容设置为空吗?)
  • 不采取行动(嗯…)
  • 限制 (???)

我基本上希望在用户完全删除后删除会话中的数据,这是因为仅当我的会话管理器检测到到期时,才删除会话。

因此,如果有人可以告诉我这些选项的作用,将不胜感激。


阅读 333

收藏
2020-05-17

共1个答案

一尘不染

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

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

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

编辑:您没有询问它们,但是SQL标准定义了另外两个操作:SET DEFAULTNO ACTION。在MySQL中,NO ACTION等效于RESTRICT。(在某些DBMS中,这NO ACTION是一个延迟检查,但是在MySQL中,所有检查都是立即执行的。)MySQL解析器接受SET DEFAULT,但是InnoDB和NDB引擎均拒绝这些语句,因此SET DEFAULT实际上不能用于ON UPDATEor或ON DELETE约束。

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

2020-05-17