我有一个简单的数据库模式,包含5个表和一些外键关系。现在我想更新架构而不会丢失关系。
SQLite不支持我想要执行的操作。我想标记一列AUTOINCREMENT。所以我搜索并发现我需要重新创建表格。
在所有关系中,外键是自动生成的行ID。当我重新插入数据时,这会改变(对吗?)。最好的情况是关系不匹配。最糟糕的情况(我认为)会有外键对应什么都没有。我该如何避免这种情况?
我能想到的一种方法是将所有数据转储到为此练习设计的特殊模型中。这个特殊模型将封装所有关系。然后我可以按照从最小到最大的依赖性的顺序开始创建新表。没有外键的表(但其他表使用其ID)首先进入。在插入行时,我更新了模型实例。
有更好的方法吗?谢谢你的阅读。
答案 0 :(得分:0)
自动增量列中的值可以设置为显式值:
INSERT INTO MyTable(MyAutoincID, Name) VALUES(42, 'hello')
只需将ID与其他列值一起复制即可。
此外,只要您不使用PRAGMA foreign_keys或setForeignKeyConstraintsEnabled()启用外键检查,就可以暂时阻止您的数据库。