我有一个简单的数据库模式,其中包含5个表和一些外键关系。现在,我希望在不丢失关系的情况下更新模式。
SQLite不支持我要执行的操作。我想将列标记为自动增量。所以我进行了搜索,发现我需要重新创建这些表。
在所有的关系中,外键是自动生成的行ID。当我重新插入数据时,这将改变(对吗?)。最好的情况是关系不匹配。最糟糕的情况(我认为)是外键不对应任何内容。我该如何避免这种情况?
我能想到的一种方法是将所有数据都转储到一个专门为这个练习设计的模型中。这个特殊的模型将封装所有的关系。然后,我可以开始按照从最少到最多的顺序创建新的表。没有外键(但其他表使用它的ID)的表首先进入。在插入行时,我更新了模型实例。
有没有更好的方法来做这件事?感谢您的阅读。
发布于 2015-03-30 15:31:57
可以将自动递增列中的值设置为显式值:
INSERT INTO MyTable(MyAutoincID, Name) VALUES(42, 'hello')只需将ID与其他列值一起复制即可。
此外,只要您不使用PRAGMA foreign_keys或setForeignKeyConstraintsEnabled()启用外键检查,就会允许您的数据库暂时具有不一致的数据。
https://stackoverflow.com/questions/29335279
复制相似问题