MySQL LAST_INSERT_ID()问题的可能性

时间:2018-10-03 06:05:35

标签: mysql

如果我有插入查询,例如:

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

然后使用

获取插入记录的ID。
LAST_INSERT_ID();

查找,但是如果在插入和LAST_INSERT_ID()之间执行另一个插入会发生什么情况。

由于没有参数传递给LAST_INSERT_ID(),MySQL如何知道返回正确的ID(对于第一次插入还是第二次插入);

使用此功能是否保存?

谢谢

3 个答案:

答案 0 :(得分:3)

我假设您的意思是,如果我连接到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,这应该可以做您想做的事情。

答案 1 :(得分:0)

如果使用单个INSERT查询将多个行插入表中,则LAST_INSERT_ID函数将返回第一行的最后一个插入ID。 即

如果您的表ID的列值为3,并且您将在单个查询中插入4行,则LAST_INSERT_ID将为您提供4而不是7

如果您在4个不同的插入查询中插入4行,则LAST_INSERT_ID将为您提供7

答案 2 :(得分:0)

last_insert_id( )mysqli_insert_id( )将始终返回最近查询的id。另外请注意,id字段必须启用AUTO_INCREMENT。

它不能让您自由选择任何特定的表格。否则,您将无法获得上一个查询生成的id

因此,从这一点来看,它的作用很小。只有最后一个id,哪个表都没有关系。

要从任何特定表中获取最后一个id,此查询将有所帮助:"SELECT id FROM table_name ORDER BY id DESC LIMIT 1"