如果我有插入查询,例如:
INSERT INTO user(username) VALUES('admin');
然后使用
获取插入记录的ID。LAST_INSERT_ID();
查找,但是如果在插入和LAST_INSERT_ID()之间执行另一个插入会发生什么情况。
由于没有参数传递给LAST_INSERT_ID(),MySQL如何知道返回正确的ID(对于第一次插入还是第二次插入);
使用此功能是否保存?
谢谢
答案 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"