PostgreSQL中外键关联父子表时UPDATE/DELETE的默认动作是什么?
PostgreSQL外键UPDATE/DELETE操作的默认动作说明
你的猜测完全正确!在PostgreSQL中,当子表通过外键关联父表时,UPDATE和DELETE操作的默认动作确实是NO ACTION。
可能你会疑惑它和RESTRICT的区别,这里简单梳理下:
NO ACTION是在SQL语句执行完成后才检查外键约束,如果此时发现有违反约束的情况(比如删除父表记录后子表还有关联数据),才会抛出错误并回滚操作RESTRICT则是在语句执行过程中就进行约束检查,一旦发现会违反外键的操作,立刻终止执行
下面把所有可选动作的具体作用列出来,方便你参考:
NO ACTION:默认行为,不主动修改子表数据,但会在语句结束时校验约束,违反则报错RESTRICT:直接阻止任何会破坏外键约束的UPDATE/DELETE操作,检查时机更早CASCADE:父表的记录被更新或删除时,子表中对应的关联记录会同步执行相同的UPDATE/DELETE操作SET NULL:父表记录变动时,子表的关联字段会被设为NULL(前提是子表该字段允许NULL值)SET DEFAULT:父表记录变动时,子表的关联字段会被设为预先定义的默认值(前提是子表该字段有默认值配置)
内容的提问来源于stack exchange,提问作者yodabar
相关产品推荐
相关产品推荐

