【问题标题】:What do the on_delete options in Ecto.Migrations.references/2 do?Ecto.Migrations.references/2 中的 on_delete 选项有什么作用?
【发布时间】:2019-08-07 07:15:30
【问题描述】:

Ecto documentation 描述了references/2 可用的选项,但没有记录这些选项的作用。可用的选项有:

  • :nothing
  • :delete_all
  • :nilify_all
  • :restrict

他们是做什么的?

【问题讨论】:

    标签: elixir ecto


    【解决方案1】:

    这实际上是一个根本的 SQL 问题。

    https://github.com/elixir-ecto/ecto_sql/blob/52f9d27a7ad86442f442bad2f7ebd19ba09ddc61/lib/ecto/adapters/myxql/connection.ex#L902-L905

    PostgreSQL documentation 清楚地概述了这些选项:

    • :nothing - 如果在检查约束时任何引用行仍然存在,则会引发错误;如果您不指定任何内容,这是默认行为。
    • :delete_all - 指定当引用的行被删除时,引用它的行也应该被自动删除
    • :nilify_all - 删除引用行时,将引用行中的引用列设置为 nil
    • :restrict - 防止删除引用的行。如果有引用的对象,它将失败。

    :nothing:restrict 相似,但是:

    这两种选择的本质区别在于 [:nothing] 允许将检查推迟到 事务,而 [:restrict] 没有。

    【讨论】:

    • 好的,那么这实际上是一个 SQL 问题,而不是 Ecto。
    猜你喜欢
    • 2018-11-03
    • 2011-06-16
    • 1970-01-01
    • 2020-01-18
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多