【发布时间】:2019-08-07 07:15:30
【问题描述】:
Ecto documentation 描述了references/2 可用的选项,但没有记录这些选项的作用。可用的选项有:
:nothing:delete_all:nilify_all:restrict
他们是做什么的?
【问题讨论】:
Ecto documentation 描述了references/2 可用的选项,但没有记录这些选项的作用。可用的选项有:
:nothing:delete_all:nilify_all:restrict他们是做什么的?
【问题讨论】:
这实际上是一个根本的 SQL 问题。
PostgreSQL documentation 清楚地概述了这些选项:
:nothing - 如果在检查约束时任何引用行仍然存在,则会引发错误;如果您不指定任何内容,这是默认行为。:delete_all - 指定当引用的行被删除时,引用它的行也应该被自动删除:nilify_all - 删除引用行时,将引用行中的引用列设置为 nil
:restrict - 防止删除引用的行。如果有引用的对象,它将失败。:nothing 和 :restrict 相似,但是:
这两种选择的本质区别在于 [
:nothing] 允许将检查推迟到 事务,而 [:restrict] 没有。
【讨论】: