2015-05-26 26 views
0

得到MAX ID如果我有一堆插入到表中,並執行select語句來獲取最後一個id,請等待,直到所有插入完成?如果我使用MAX或last_insert_id,會有一些區別嗎?mysql - 總是從表

現在我使用:

SELECT MAX(ID) as myid FROM MY_TABLE WHERE my_column = "my_condition"; 
+3

這聽起來像你想要一個'auto_increment'列,所以當你插入值時你不會顯式設置'id'。 –

+0

你必須瞭解mutli任務(線程),每個請求將由不同的進程/處理程序, – user1844933

+0

處理,但是當我做插入時,我可以保證select將始終返回最後插入的ID? – heliosk

回答

0

如果使用MAX,你總是會在數據庫中保存的最大數量。這就像使用AUTO_INCREMENT。

當您使用「LAST_INSERT_ID」你得到最後插入的ID,所以如果你插入的ID 4的東西,但你的最大編號是10,你要檢查,如果是一些4和10

之間我建議你使用「MAX」或正確配置它在數據庫中的AUTO_INCREMENT

2

將選擇等待,直到所有的插入完成?

沒有。爲什麼呢?如果插入查詢是在SELECT查詢之前發出的,並且它是MyISAM表,那麼是的,您將獲得最後一個插入的ID。這種查詢序列化是大多數人使用InnoDB進行OLTP的原因。

如果我使用MAX或last_insert_id,有一些區別嗎?

是。 last_insert_id將返回會話生成的最後一個ID,而MAX(id)將返回最大的整數,在您的查詢運行之前由任何會話分配 - auto_increment整數不會單調遞增。

除非你確切地知道你在做什麼,並且故意做一些很奇怪的事情,last_insert_id會給你你正在尋找的答案,並且會更有效率。

+0

是的。我明白了。 – heliosk