Mysql workbench外键选项[Restrict,Cascade,Set Null,No Action],它们有什么作用?

use*_*173 23 mysql-workbench

在更新和删除时的外键选项中.每个字段[Restrict,Cascade,Set Null,No Action]有什么作用?

Axe*_*rat 39

如果你逐一采取:

对于更新和删除:

如果您尝试更新/删除父行:

限制:如果有子行,则不会删除任何内容

级联:子行也将被删除/更新

设置为空:如果删除父列,则子列将设置为null

无操作:子行不会涉及删除/更新

  • "限制"和"不采取行动"是相同的.Restrict是仅限mysql的关键字,而"无操作"是SQL标准. (3认同)
  • @glautro 查看 http://stackoverflow.com/questions/5809954/mysql-restrict-and-no-action 。也许某些引擎按照您的描述工作,但在 Innodb 中,除非暂时禁用外键检查,否则无法更新/删除父行并创建孤立的子行。这对于数据完整性来说非常棒(如果这是您尝试使用 FK 实现的目标) (2认同)

Jay*_*tel 23

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

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

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

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

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