2012-04-12 123 views
2

我想在插入後立即獲取表的自動增量id。 LAST_INSERT_ID()應該可以工作,但它是100%完全證明嗎?這意味着如果兩個語句在一個存儲過程中同時執行,它是否會使用該上下文中的最後一個ID或來自另一個連接的ID?MySQL和自動增量一致性

INSERT INTO foo (auto,text) 
    VALUES(NULL,'text');   # generate ID by inserting NULL 
INSERT INTO foo2 (id,text) 
    VALUES(LAST_INSERT_ID(),'text'); # use ID in second table 

回答

2

MySQL手冊說,這

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

重要 如果您將使用一個INSERT語句多行,LAST_INSERT_ID()返回第一個插入的 行生成值只要。這樣做的原因是可以輕鬆地再現 針對其他服務器的相同INSERT語句。

如果INSERT或UPDATE語句中的所有行均成功,則LAST_INSERT_ID()的值將在所有版本 中保持一致。

當前正在執行的語句不影響 LAST_INSERT_ID()的值。

如果前面的語句返回錯誤,則LAST_INSERT_ID()的值是未定義的。對於事務性表,如果 語句由於錯誤而回滾,則LAST_INSERT_ID()的值未定義。對於手動ROLLBACK, LAST_INSERT_ID()的值不會恢復到事務之前的值;它 仍然是在ROLLBACK點。

所以,是的,這是這樣做的最佳方式,只要你使用了單個插入查詢不分組那些