【问题标题】:how to do cascade delete for foreign key in slick如何在 slick 中对外键进行级联删除
【发布时间】:2014-03-20 16:24:54
【问题描述】:

slick中,外键如何级联删除?有没有办法在架构级别指定这个,或者在查询后调用 delete 时这样做?

【问题讨论】:

    标签: scala slick


    【解决方案1】:

    我更新了文档:https://github.com/slick/slick/pull/721/

    可以使用 Table 的 foreignKey 方法定义外键约束。它首先为约束、引用列和被引用表取一个名称。第二个参数列表从被引用的表中获取一个函数到其被引用的列,以及用于 onUpdate 和 onDelete 的 ForeignKeyAction,它们是可选的,默认为 NoAction。为表创建 DDL 语句时,会将外键定义添加到表中。

    class Coffees(tag: Tag) extends Table[(String, Int, Double, Int, Int)](tag, "COFFEES") {
      def supID = column[Int]("SUP_ID")
      //...
      def supplier = foreignKey("SUP_FK", supID, suppliers)(_.id, onUpdate=ForeignKeyAction.Restrict, onDelete=ForeignKeyAction.Cascade)
      // compiles to SQL:
      //   alter table "COFFEES" add constraint "SUP_FK" foreign key("SUP_ID")
      //     references "SUPPLIERS"("SUP_ID")
      //     on update RESTRICT on delete CASCADE
    }
    

    【讨论】:

    • 如果在创建表之后添加了 onDelete,这应该可以工作吗?它只是添加它,重新启动服务器,表没有改变......
    猜你喜欢
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多