2015-10-13 82 views
0

我有两个具有相同结构但数据不同的数据库。 And ...在两个数据库中,所有数据在列'Tiles'和'TilesData'中都有自动生成的ID,这些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足够了吗?

回答

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; 

如果id声明与AUTOINCREMENT,那么你必须检查(如果需要调整)sqlite_sequence table中的下一个ID值。

+0

是的,这两个表具有相同的最大ID值。我已经运行这两个插入,第一个是成功完成,但第二个显示我错误: [10:18:50]对数据库'DataBase_2'执行SQL查询时出错:插入表“TilesData”违反外键约束“ fki_TilesData_id_Tiles_id“ 这些触发器是重要的还是我可以放下它们(然后插入工作)? http://i.imgur.com/t5P4W4E.jpg http://i.imgur.com/jWMzvfT.jpg –

+0

该触发器的用途是检查ID是否匹配,但在使用时不起作用自动增量功能。你必须(暂时)放弃它。 –

相关问题