2012-11-09 59 views
1

由於另一個答案是正確的,我有一個解決我的問題的新想法(這不是真的像下面的情況),我開始一個新的線程。MySQL,將AUTO_INCREMENT傳遞給另一個表

同樣的例子,cds.id是AUTO_INCREMENT,這兩個表並沒有任何關係,有沒有辦法將生成的ID發佈到語言表中?

Table for CDs (cds): 
id | type 
----------------------- 
1 | CD 
2 | LP 
3 | CD 

Table for names: 
cd_id | language | name 
----------------------- 
1  | fi  | AAA 
1  | de  | AAACHTUNG 
3  | en  | CCC 

現在SELECT會很simlple和結構較好, 如果我現在有創建CD E體,像

<input... > = the name -> 'best of XX' 
<select...> = language -> 'en' 
<select...> = type  -> 'CD' 

,我做了後,我該怎麼辦多重插入? 插入到這些表應該是...

INSERT INTO cds ('', 'CD'); 
INSERT INTO languages ('*the generated id in table above*', 'en', 'best of XX'); 
+0

什麼技術與MySQL溝通? PHP? –

+0

是啊...你正在想插入 - >選擇 - >插入選擇的結果?在這種情況下,我沒有任何要求,有很多'CD':s ...我可以得到持續創建的一個,但如果兩個人同時創建一些東西,這可能是不好的... – gubbfett

回答

3

MySQL有LAST_INSERT_ID()它返回最近INSERTAUTO_INCREMENT值。

INSERT INTO languages (LAST_INSERT_ID(), 'en', 'best of XX'); 

大多數語言具有此功能的包裝。例如,在PHP中它是mysqli_insert_id()

+0

是的。這可以工作。我認爲在這種情況下......但是如果兩個用戶同時發帖,他們可以得到相同的最後創建的數字......只是想,如果有更好的方式來做到這一點,就像只有一個查詢兩個表而不是2. – gubbfett

+0

如果一個帖子同時被製作到另一個表中,並且它有一個AUTO_INCREMENT,是不是有可能會得到這個id,並且存在鏈接到錯誤ID的風險? 「機會有多大?」 - 如果某件事情可能出錯,它會的。這是我的經驗;) – gubbfett

+0

我理解這個問題。但是,有措施來防止這種情況發生。查看我答案中的鏈接。我不會擔心。特別是當查詢順序運行時。但是,您始終可以使用[事務](http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-transactions.html)。 –

0

嘗試

INSERT INTO languages (last_insert_id(), 'en', 'best of XX'); 

Last_Insert_Id得到自動的最後一個自動遞增值生成的ID列