簡體   English   中英

使用MYSQL LAST_INSERT_ID()來檢索插入行的ID?

[英]Using MYSQL LAST_INSERT_ID() to retrive the ID of inserted row?

我有一個表有一個AUTO INCREMENT列。 我必須在插入新行時檢索此列的值(我需要新行的值)。 我已經閱讀了很多關於它並找到了不同的解決方案,一個是使用SELECT LAST_INSERT_ID() 我聽說過很多不同的事情。 我可以或不可以使用它嗎? 我擔心另一個連接可能會在我能夠調用SELECT LAST_INSERT_ID()之前插入一個新行,因此得到錯誤的ID。

總結一下,使用SELECT LAST_INSERT_ID()是否安全? 如果沒有,我如何以安全的方式檢索最后插入的ID?

我不認為你需要擔心你在這里提到的情況。

從Mysql文檔:
生成的ID在每個連接的基礎上在服務器中維護。 這意味着函數返回給定客戶端的值是為該客戶端影響AUTO_INCREMENT列的最新語句生成的第一個AUTO_INCREMENT值。 此值不受其他客戶端的影響,即使它們生成自己的AUTO_INCREMENT值。 此行為可確保每個客戶端都可以檢索自己的ID,而無需關心其他客戶端的活動,也無需鎖定或事務。

有關詳細信息,請參閱this

雖然,如果他們有不同的意見,我很樂意從別人那里讀到。

如果您擁有該表的最后一個id是至關重要的,則可以鎖定表以進行寫入,然后使SELECT MAX(id) FROM table_name然后解鎖表。

生成的ID是基於每個連接的,因此您不應該有任何問題! 這篇文章更詳細。

是的,根據官方文件,這是安全的:

生成的ID在每個連接的基礎上在服務器中維護。 這意味着函數返回給定客戶端的值是為該客戶端影響AUTO_INCREMENT列的最新語句生成的第一個AUTO_INCREMENT值。 此值不受其他客戶端的影響,即使它們生成自己的AUTO_INCREMENT值。 此行為可確保每個客戶端都可以檢索自己的ID,而無需關心其他客戶端的活動,也無需鎖定或事務。

取自: MYSQL文檔12.13。 信息功能

如果您正在使用PDO,請使用PDO::lastInsertId.

如果您使用的是mysql,請使用mysqli::$insert_id.

是的,使用AI是安全的這個帖子說的是: http//dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

而不是直接使用select語句,嘗試使用preparedStatement.

你也可以使用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM