【问题标题】:I can't seem to get foreign keys to work in SQLite.swift我似乎无法让外键在 SQLite.swift 中工作
【发布时间】:2019-07-16 18:52:36
【问题描述】:

我遇到了一个问题,这让我在一段时间内无法继续使用应用程序,我想我终于想办法解决了。出于某种原因,我似乎无法让外键在 SQLite.swift/SQLite 中工作(我不知道我是在滥用库还是误解了 SQLite)。我正在尝试使用级联删除功能,我觉得好像我已经正确设置了所有内容,但它不起作用。

首先让我确保我对此的理解很清楚。我有一个父表“类别”和一个子表“子类别”,它是子表“事务”的父表。子类别有一行“category_id”,它与具有在删除时级联的外键的类别的“id”行相关。 Transactions 有一行“subcategory_id”,它与 Subcategories 的“id”行相关,外键在删除时设置为 null。当我从类别中删除一行时,也应删除子类别中具有该类别 id 的任何行,并且事务中具有该子类别 id 的任何行都应将子类别 id 字段设置为空。对吗?

我在一个类中处理了我所有的 SQLite 事情。这是我的代码的 sn-p,它与创建外键的子类别表有关:

do {
    try db!.run(subcategories.create(ifNotExists: true) { table in
        table.column(id, primaryKey: .autoincrement)
        table.column(name, defaultValue: "New Subcategory")
        table.column(sort)
        table.column(category_id)
        table.column(budget_id)
        table.foreignKey(category_id, references: categories, id, update: .cascade, delete: .cascade)
        table.foreignKey(budget_id, references: budgets, id, update: .cascade, delete: .cascade)
    })
} catch {
    print("SQLite: Unable to create 'Subcategories' table")
}

Here is the full code for that class.

如果有人能解释我在这里做错了什么,我会把我的第一个孩子给你(或者至少谢谢)。

【问题讨论】:

  • 每次打开数据库时都启用外键吗? sqlite.org/foreignkeys.html#fk_enable
  • @Shawn 我没有,但我在使用 SQLite.swift 的文档中找不到任何提及的内容?我将如何快速使用这个表达式?抱歉,我是初学者。
  • 您只需像执行任何其他不返回值的 SQL 语句一样执行 pragma。
  • @Shawn Gotcha。谢谢!

标签: swift sqlite foreign-keys


【解决方案1】:

我最终在这里找到了答案,实际上与未启用的键有关。

https://github.com/stephencelis/SQLite.swift/issues/757

【讨论】:

    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 2011-11-30
    • 2015-09-20
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多