[英]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.