2014-12-04 16 views
0

我無法編寫查詢或過程。我的要求是我想要將數據從表A及其子表B移動到具有相同結構的新父表(C)及其子表(D)。表A移動數據 - Mysql的

主鍵列被插入到參考表B中的列中的一個。我有的挑戰是當我從父表A移動到新的父表C時,將生成新的主鍵。我想插入新生成的密鑰到表d與相應的行,當我從子表B中的數據遷移到新的子表D.

這可能是簡單的過程或查詢的人。但我無法想像。需要一些幫助!

+0

表A,B,C和D已經在所有表中創建了一些數據。我想從A到C以及從B到D的相應行移動一堆行(僅有10個ID) – Arun 2014-12-04 15:58:20

回答

0

假設你有一個表答:

CREATE TABLE一( ID INT(10)無符號NOT NULL AUTO_INCREMENT, some_data爲varchar(100), PRIMARY KEY(ID) )AUTO_INCREMENT = XXX;

而表C:

CREATE TABLE C( ID INT(10)無符號NOT NULL AUTO_INCREMENT, some_data VARCHAR(100), PRIMARY KEY(ID) )AUTO_INCREMENT = YYY;

寫在表C的AUTO_INCREMENT值,並從c.id刪除:

ALTER TABLE C更改ID ID INT(10)無符號NOT NULL;

創建臨時表如。 tmp_copy_a_c具有相同AUTO_INCREMENT vaule: CREATE TEMPORARY TABLE tmp_copy_a_c( id_c INT(10)無符號NOT NULL AUTO_INCREMENT, ID_A INT(10)無符號NOT NULL, some_data VARCHAR(100), PRIMARY KEY(id_c) INDEX (id_a) )AUTO_INCREMENT = YYY;

然後,所有數據從A複製到臨時表:

INSERT INTO tmp_copy_a_c(ID_A,some_data)SELECT ID,some_data從WHERE 「上表中的一些條件」;從tmp_copy_a_c複製到表c: INSERT INTO c(id,some_data)SELECT id_c,some_data FROM tmp_copy_a_c;

從表B至表d複製數據(假設id_d是另一種自動增量): INSERT INTO d(id_c,some_child_data) SELECT tmp.id_c,b.some_child_data FROM tmp_copy_a_c TMP JOIN B ON tmp.id_a = b.id_a;

上重新創建這樣表C中的AUTO_INCREMENT:

ALTER TABLE C改變的ID INT(10)無符號NOT NULL AUTO_INCREMENT;

注意:此方法假定該表沒有增長/運行此腳本,而其他進程正在改變。

+0

對不起,如果我沒有在我的問題中提到這一點。表A,B,C和D已經創建了所有表中的一些數據。是的,您在表A和表C中都是正確的「主鍵上的auto_increment值」以及表C.我想從A到C移動一堆行(只有10個我有)。並且在此表中沒有創建外鍵關係,並且我無法控制它! – Arun 2014-12-04 15:57:22

+0

好的,假設你在表A中有1-100的ID,而在表C中有1-150的ID。現在你想用新的ID 151-250複製從A到C的所有行,並且在引用表的列中使用相同的ID d? – tzed 2014-12-04 16:21:17

+0

是的你是對的。從表A ID 1到100的一個小改動,我不想移動ID爲1 - 100的所有行。我有一些來自表A的ID。我只想移動這些ID。我正在研究這個,看起來像我必須使用光標寫程序來做到這一點。 – Arun 2014-12-04 16:26:50