2009-11-10 63 views
3

假設我有兩個Tabels,A和B,每個都有三列(A.id,A.title,A.text和B.id,B.a_id,B.text)。 B.a_id是涉及A.id的外鍵。現在,假設A(1,'foo','bar')中有一條記錄,B(1,1,'test')和(2,1,'test1')中有2條記錄。使用外鍵複製多個記錄

我的問題是,是否存在一個複製A中記錄的標準方法,同時複製B中與A相關的所有記錄。因此,假設我在A(2,'' (1,'foo','bar')是否有某種方法可以在B(3,2,'test')和(4,2, 「測試1)?

我從來沒有使用觸發器,這是開始做這件事的正確時刻?或者這是一個非常愚蠢的問題?

回答

4

這不是一個愚蠢的問題。不過,我相信這對於純SQL來說是不可能的,或者只有一些我不知道的奇特語法。複製行是沒有問題的(假設id爲AUTO_INCREMENT):

insert into A (title, text) select title, text from A where id = XY 

但是,那麼你需要找到最後插入ID複製在B的記錄讓我們來看看:

insert into B (a_id, text) select LAST_INSERT_ID(), text from B where a_id = XY 

嗯......也許這有效,但我對LAST_INSERT_ID()有點懷疑。無論如何,我認爲這隻能用一個聲明來完成。

讓我知道如何去

湯姆

+0

大,這個作品!謝謝!這比我使用的方法更容易(使用單獨的選擇和插入查詢)。 – 2009-11-10 13:31:29

+0

很酷。我從來沒有使用過這種組合插入...選擇語法之前,無論是。謝謝你讓我知道。 – 2009-11-10 13:37:36

+0

這甚至可以在其他進程更新表時工作,因爲''LAST_INSERT_ID()''查看當前進程插入的ID,並忽略其他進程插入的ID。 – kmoser 2017-07-25 04:20:15