2015-10-13 91 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是否匹配,但在使用時不起作用自動增量功能。你必須(暫時)放棄它。 –

相關問題