在数据库

时间:2015-10-13 14:02:50

标签: sql database sqlite

我有两个具有相同结构但数据不同的数据库。 并且......在两个数据库中,所有数据都在“Tiles”和“TilesData”列中具有自动更新ID,这些ID是相关键。我必须将行从第一行移到另一行,但是id存在异常。

我的问题描述清楚吗? enter image description here

我试过这个(但我有点害怕这个解决方案的可靠性,会有几百万行):

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足够吗?

1 个答案:

答案 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值。