簡體   English   中英

MySQL LAST_INSERT_ID()問題的可能性

[英]MySQL LAST_INSERT_ID() question potential

如果我有例如插入查詢:

INSERT INTO user(username) VALUES('admin');

然后使用獲取插入記錄的ID

LAST_INSERT_ID();

看起來很查找,但是如果在插入和LAST_INSERT_ID()之間執行另一個插入會發生什么。

由於沒有參數傳遞給LAST_INSERT_ID(),MySQL如何知道返回正確的ID(對於第一次插入還是第二次插入);

使用此功能是否省錢?

謝謝

我想你的意思是,如果我連接到MySQL服務器並執行INSERT,但是其他人也在進行插入操作,例如在客戶端當前正在使用它時,更新網站上的表,該怎么辦。

如果您去看看文檔https://dev.mysql.com/doc/refman/8.0/en/information-functions.html,那么有一個問題可以回答您的問題:

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

在MariaDB中應該是相同的。

如評論中所述,您想知道是否可以在php PDO環境中使用它。 如果您打算直接從數據庫中使用它,則為“否”,因為您將沒有與PDO相同的客戶端連接,所以您將無法獲得最后插入的ID。 如果您想直接從PDO使用它,請使用特定的PDO函數: http : //php.net/manual/fr/pdo.lastinsertid.php ,這應該可以做您想做的事情。

如果使用單個INSERT查詢將多個行插入表中,則LAST_INSERT_ID函數將返回第一行的最后一個插入ID。

如果您的表ID具有3作為列值,並且您將在單個查詢中插入4行,則LAST_INSERT_ID將為您提供4而不是7

如果您在4個不同的插入查詢中插入4行,則LAST_INSERT_ID將為您提供7

last_insert_id( )mysqli_insert_id( )將始終返回最近或最近查詢的id 還要注意, id字段必須啟用AUTO_INCREMENT。

它不能讓您自由選擇任何特定的表。 否則,您將無法獲得上一個查詢生成的id

因此,從這一點來看,它的作用很小。 只有最后一個id ,與哪個表無關。

要從任何特定的表中獲取最后一個id ,此查詢將很有幫助: "SELECT id FROM table_name ORDER BY id DESC LIMIT 1"

暫無
暫無

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

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