繁体   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