2014-09-29 66 views
1

我正在開發一個新站點,我必須將其舊數據遷移到具有新佈局結構的新數據庫。

我很難遷移,一個人可能擁有多個地址。

只是一個細節,當我從舊數據庫插入這些客戶端時,我讓自動增量設置它的ID,所以新的客戶端ID將不同於舊的數據庫表,我應該保持它們是否相同?

考慮如下表結構:

客戶端表在不同佈局的兩個數據庫之間遷移數據

#|id_client|#|name|# 
#| 1 |#|John|# 
#| 2 |#|Bob |# 
#| 3 |#|Karl|# 

這個表很容易遷移,我只需要做:

INSERT INTO NEW_DB.CLIENT SELECT * FROM (SELECT id_cliente,name FROM OLD_DB.CLIENT) 

但是如果我有一個地址表,用戶可能有0..n個地址?
我如何將它插入到Client.id_client的FK引用中,記住新的客戶端ID與舊的客戶端ID不同?

#|id_address|#|address|#|Client_id_client 
#| 1  |#|Addr123|#|  1 
#| 2  |#|Addr321|#|  1 
#| 3  |#|Addr124|#|  2 
+0

好,保留舊ID說得很簡單,但它是如果有人好可以告訴我如何在不使用舊的IDS的情況下完成,但讓自動增量設置它們。 – BernardoLima 2014-09-29 20:59:00

回答

1

爲了有一個完全可移植的腳本,而不是依賴於自動生成的ID,你需要確定你的客戶端表的唯一列標識客戶端(除ID之外)。

假設的名字是你的客戶表中的唯一屬性,你可以將數據插入到你的地址表,如下所示:

INSERT INTO NEW_DB.ADDRESS (COL1, COL2,..., CLIENT_ID) 
SELECT OLD_DB.ADDRESS.COL1, OLD_DB.ADDRESS.COL2,... 
(SELECT NEW_DB.CLIENT.CLIENT_ID from NEW_DB.CLIENT WHERE NEW_DB.CLIENT.NAME = OLD_DB.CLIENT.NAME) 
FROM OLD_DB.ADDRESS, OLD_DB.CLIENT 
WHERE OLD_DB.ADDRESS.CLIENT_ID = OLD_DB.CLIENT.CLIENT_ID