我似乎无法让外键在SQLite.swift中工作

时间:2019-02-22 16:16:58

标签: swift sqlite foreign-keys

我遇到了一个问题,一段时间以来一直在阻止我开发应用程序,我认为自己终于想尽办法了。由于某种原因,我似乎无法让外键在SQLite.swift / SQLite中工作(我无法弄清楚是在滥用库还是在总体上误解了SQLite)。我正在尝试使用级联删除功能,感觉好像我已经正确设置了所有东西,但是它不起作用。

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

我将所有SQLite东西都放在一个类中处理。这是与创建子类别表有关的代码片段,我在其中创建了外键:

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.

如果任何人都可以发现我在这里做错了什么,我会给你我的长子(或者至少是谢谢)。

1 个答案:

答案 0 :(得分:0)

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

example online