使用 GRDB 更改对现有表的外键的引用

问题描述 投票:0回答:1

在表 Case_Supplies_Media 中,我有列 SupplyID_XRef。它当前有一个对 Media_List 的外键引用。我需要更改对 Supplies_DVD_List 的引用。我发现了一些零碎的东西,但我不知道如何将整个事情放在代码中。我正在使用GRDB。 预先感谢您的帮助。

 func update_Foreign_Key()
    {
        let the_Version = ModelData.get_Current_Version()
        
        if the_Version == 6
        {
            do {
                try Database_GRDB.shared.databaseConnection!.write { db in
                    
                    try db.execute(sql: "UPDATE Case_Supplies_Media SET SupplyID_XRef = :value", arguments: ["value": "Supplies_DVD_List"])
                    
                    // FOREIGN KEY("SupplyID_XRef") REFERENCES "Media_List"
                    // change to this
                    // FOREIGN KEY("SupplyID_XRef") REFERENCES "Supplies_DVD_List"
                    
                    // Set the version to 7
                    try db.execute(sql: "UPDATE My_Settings SET Version = :version WHERE SettingsID = :id", arguments: ["version": 7, "id": 1])
                }
            } catch {
                print("Updating the Foreign_Key values failed! (AppDelegate) \(error)")
            }
        }
    }
ios swift xcode sqlite grdb
1个回答
0
投票

要更改外键的目标表,需要重新创建数据库表。

SQLite 在进行其他类型的表架构更改中精确记录了该过程。由于篇幅比较长,这里就不复制了。

所有步骤都可以通过 SQL 查询通过 GRDB 执行。

© www.soinside.com 2019 - 2024. All rights reserved.