Php 上次插入id的效率如何?
我最近遇到了一个问题,我需要能够获取我在页面上插入的查询的最后一个ID。这个过程很简单,但我想知道这个过程是如何完成的。我的代码是这样的:Php 上次插入id的效率如何?,php,mysql,one-to-many,auto-increment,identifier,Php,Mysql,One To Many,Auto Increment,Identifier,我最近遇到了一个问题,我需要能够获取我在页面上插入的查询的最后一个ID。这个过程很简单,但我想知道这个过程是如何完成的。我的代码是这样的: $query30 = $db->query("INSERT `mybb_quickexample` SET `player1` = '".$row19[username]."', `player2` = '".$row18[username]."', `games` = '".$numberofgames."'")or die( mysql
$query30 = $db->query("INSERT `mybb_quickexample` SET `player1` = '".$row19[username]."', `player2` = '".$row18[username]."', `games` = '".$numberofgames."'")or die( mysqli_error());
正如您所看到的,我刚刚在mybb_quickexample中插入了一些内容,然后它生成了一个ID。现在在它下面的代码中,我尝试定位ID
$mmid = $db->insert_id();
foreach($_POST['optiontitle'] as $val){
$val = $db->escape_string($val); //
echo $val;
$query30 = $db->query("INSERT `mybb_quickexample2` SET `gid` = '".$id."', `mid` = '".$mmid."', `optiontitle` = 'OPTION TITLE', `option1` = '$val'")or die( mysqli_error());
}
如您所见,它获取最近的ID并将其放入新表中。允许这两个表在以后需要时相互对应
但是,insert_last_id是获取插入数据库的最后一行还是页面上插入数据库的最后一行?现在我不完全确定这背后的机制,但我问这个问题是因为,如果一个人和另一个人同时加载这个页面,会怎么样?是否有不匹配的ID抓取或代码仍然有效?
insert\u last\u ID
返回同一SQL会话/连接的最后插入ID(请参阅)。-SQL server不知道您的页面。只要连接/会话未共享,就不会出现任何问题(例如竞争条件)
也可以仅使用SQL获取最后插入的ID:
select last_INSERT_ID()
或直接在下面的SQL查询中使用它,以减少客户机-服务器之间的往返,如插入表B set-foreign\u-id=LAST\u-insert\u-id(),data=“something”
(注意,如果下面的SQL语句也有一个自动递增列,那么下一个LAST\u INSERT\u ID()(因为没有针对数据库的额外请求)
在相反的情况下,它返回连接的最后一个id。如果连接是共享的,那么最好将其包装在事务中。其他人指出,最后一个插入id是每个MySQL连接维护的。它使用连接中的自动递增值捕获最近插入时使用的实际id。即,即使其他连接也在进行大量插入,它也会做正确的事情。(在同时为多个用户提供服务的繁忙网站上可能是这样。)
如果您需要在insert中使用它,您可以直接这样做,而无需到客户端进行任何形式的往返
INSERT INTO person (first, last)
VALUES ('Jack', 'Straw');
INSET INTO address (person_id, addr, town)
VALUES (LAST_INSERT_ID(),'10 Downing St', 'London');
看看它是如何工作的?你可以用它在插入值列表中提供一个值。当你这样使用它时,这是MySQL中最简单、最有效的事情之一。真的吗?我今天以前从未听说过插入最后一个id这是唯一的方法(不锁定表)以线程安全的方式获取最新插入的ID。可能重复的@LightnessRacesinOrbit不是stackoverflow post。可能重复吗?