设置表关系“级联”,“设置空”和“限制”是做什么的?
我想开始在一个新的项目中使用表关系。
一些Googlesearch后,我有两个表设置为InnoDB:
我想链接的关键是
– > users-> userid(primary) – > sessions-> userid(index)
在这个过程中唯一不能理解的是“On update”和“On delete”的不同设置
这里的选项是:
- – (没有?)
- 级联(???)
- 设置为空(将所有内容设置为空?)
- 没有行动(呃…)
- 限制 (???)
我基本上希望会话中的数据被删除,当一个用户被完全删除这是因为会话将只被删除,当过期被检测到我的会话pipe理器…
所以,如果任何人都可以告诉我这些选项做什么,将不胜感激。
父级更改时, CASCADE
将传播更改。 (如果删除一行,引用该行的约束表中的行也将被删除,等等)
当父行消失时, SET NULL
将列值设置为NULL。
RESTRICT
导致尝试删除父行失败。
编辑:你没有问他们,但SQL标准定义了另外两个动作: SET DEFAULT
和NO ACTION
。 在MySQL中, NO ACTION
等同于RESTRICT
。 (在某些DBMS中, NO ACTION
是延迟检查,但在MySQL中,所有检查都是立即执行的。)MySQLparsing器接受SET DEFAULT
,但InnoDB和NDB引擎都拒绝这些语句,所以SET DEFAULT
实际上不能用于ON UPDATE
或ON DELETE
约束。
另外,请注意,级联外键操作不会激活MySQL中的触发器。
包含外键的表称为引用 表或子表 ,包含候选键的表称为引用 表或父表 。
设置NULL :删除父表行时,将列值设置为NULL 。
级联 :CASCADE将在父级更改时传播更改。 如果删除一行,那么引用该行的约束表中的行也将被删除 ,等等
RESTRICT :RESTRICT导致您无法删除给定的父行,如果存在引用该父行的值的子行。
没有行动 :没有行动和限制非常相似。 当在引用的表上执行UPDATE或DELETE语句时,DBMS将在语句执行结束时validation没有任何引用关系被违反 。 简而言之,如果父行删除或更新,则无需担心。