设置表关系"Cascade","Set Null"和"Restrict"是做什么的?

HTD*_*chy 47 mysql innodb phpmyadmin relational-database

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

经过一些谷歌搜索后,我得到了2个表作为InnoDB:

我要链接的键是

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

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

这里的选项是:

  • - (没有?)
  • 级联(???)
  • 设置Null(将所有内容设置为null?)
  • 没有动作(好吧......)
  • 限制 (???)

我基本上希望在完全删除用户时删除会话中的数据这个会话只会在我的会话管理器检测到到期时删除...

因此,如果有人能告诉我这些选项是做什么的,那将非常感激.

Ted*_*opp 120

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

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

RESTRICT 导致父行的尝试DELETE失败.

编辑:您没有询问它们,但SQL标准定义了另外两个动作:SET DEFAULTNO ACTION.在MySQL中,NO ACTION相当于RESTRICT.(在某些DBMS,NO ACTION是一个延期检查,但在MySQL的所有检查是立竿见影的.)MySQL解析程序接受SET DEFAULT,但无论是InnoDB和NDB引擎拒绝那些语句,所以SET DEFAULT实际上不能用于任何一个ON UPDATEON DELETE约束.

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


Jay*_*tel 20

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

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

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

RESTRICT:限制的原因,你不能删除一个给定的父行,如果一个子行存在引用,该父行的值.

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