【发布时间】: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