Mysql “设置表关系做什么”;级联&引用;设置为空";及;限制;做

Mysql “设置表关系做什么”;级联&引用;设置为空";及;限制;做,mysql,phpmyadmin,innodb,relational-database,Mysql,Phpmyadmin,Innodb,Relational Database,我想开始在新项目中使用表关系 通过谷歌搜索,我得到了两张表,它们被设置为InnoDB: 我想链接的关键是 ->用户->用户ID(主) ->会话->用户ID(索引) 在这个过程中,我唯一不明白的是“更新时”和“删除时”的不同设置有什么作用 这里的选项是: --(什么都没有?) 级联(?) 设置Null(将所有内容设置为Null?) 不采取行动(嗯…) 限制(?) 我基本上希望在用户被完全删除时删除会话中的数据 这是因为只有当会话管理器检测到过期时才会删除会话 因此,如果有人能告诉我这些选项的作

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

通过谷歌搜索,我得到了两张表,它们被设置为InnoDB:

我想链接的关键是

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

在这个过程中,我唯一不明白的是“更新时”和“删除时”的不同设置有什么作用

这里的选项是:

  • --(什么都没有?)
  • 级联(?)
  • 设置Null(将所有内容设置为Null?)
  • 不采取行动(嗯…)
  • 限制(?)
我基本上希望在用户被完全删除时删除会话中的数据 这是因为只有当会话管理器检测到过期时才会删除会话


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

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

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

RESTRICT
导致尝试删除父行失败

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


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

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

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

级联:当父级更改时,级联将传播更改。如果删除一行,受约束表中引用该行的行也将被删除,以此类推

限制:限制原因如果存在引用父行值的子行
,则无法删除给定的父行

不采取行动:不采取行动和限制非常相似。在引用表上执行UPDATE或DELETE语句时,DBMS在语句执行结束时验证没有违反任何引用关系。在短子行中,如果父行删除更新,则无需考虑


谢谢你,泰德,我已经把它设置为“删除时:级联”和“更新时:不做任何事情”并对它进行了测试,看起来它确实像我希望它做的那样