我有两个具有相同结构但数据不同的数据库。 并且......在两个数据库中,所有数据都在“Tiles”和“TilesData”列中具有自动更新ID,这些ID是相关键。我必须将行从第一行移到另一行,但是id存在异常。
我试过这个(但我有点害怕这个解决方案的可靠性,会有几百万行):
INSERT INTO DataBase_2.Tiles (X,Y,Zoom,Type,CacheTime)
SELECT X, Y, Zoom, Type, CacheTime FROM DataBase_1.Tiles;
INSERT INTO DataBase_2.TilesData(Tile)
SELECT Tile FROM DataBase_1.TilesData;
你能帮帮我或给我一些提示吗?只是SQL足够吗?
答案 0 :(得分:0)
当自动增量列声明为INTEGER PRIMARY KEY(不带 AUTOINCREMENT)时,新ID将获得表中已有的最大值之后的下一个值。
检查两个表是否具有相同的最大ID值:
SELECT MAX(id) FROM DataBase_2.Tiles;
SELECT MAX(id) FROM DataBase_2.TilesData;
如果它们相等,那么相应的行确实会获得相同的新ID。但是,您应该使用ORDER BY来确保以相同的顺序读取/插入行:
INSERT INTO DataBase_2.Tiles (...)
SELECT ... FROM DataBase_1.Tiles ORDER BY id;
INSERT INTO DataBase_2.TilesData(Tile)
SELECT Tile FROM DataBase_1.TilesData ORDER BY id;
如果使用AUTOINCREMENT声明id
列 ,那么您必须检查(如果需要,调整)sqlite_sequence table中的下一个ID值。