如果流量很高,从数据库中检索最后插入的ID会有混淆的风险吗


Will Retrieving The Last Inserted ID From DB risk getting Mix Up If The Traffic Is High?

在Codeigniter中,我们使用

* (Method that inserts a new row in the DB ) *

然后:

last_id = $this->db->insert_id();

检索数据库中"上次创建"行的ID。

如果我们在应用程序上有很高的流量,它会意外地得到另一个用户创建的东西的ID吗?

流程:

  1. 在数据库中插入一行
  2. 运行insert_id方法以获取"最后插入的id"
  3. 使用该ID

是否存在另一个用户可能在步骤#1&2.

还是说,无论交通状况如何,它都是"即时"的?

如果没有,我们如何才能最好地防止在流量大的台阶之间发生混乱?

不,这不是问题。最后一个插入ID是每个连接的值。如果另一个用户创建了一行,那么他们有不同的连接,所以这不会影响第一个应用程序使用的连接。

来自文件:

生成的ID在服务器中以每个连接为基础进行维护。这意味着函数返回给给定客户端的值是该客户端为影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。此值不会受到其他客户端的影响,即使它们生成自己的AUTO_INCREMENT值也是如此。这种行为确保每个客户端都可以检索自己的ID,而不必关心其他客户端的活动,也不需要锁或事务。

不存在风险,除非使用相同的连接插入另一行。

如果你想,只需将你的第一个插入id存储在一个变量中:

$last_id1 = $this->db->insert_id(); //Pretend its 10
//...Another insertion here...
$last_id2 = $this->db->insert_id(); //Pretend its 13

现在输出两个值:

echo "ID1: $last_id1"; //Prints 'ID1: 10'
echo "ID2: $last_id2"; //Prints 'ID2: 13'

现在,您将能够在其他时刻使用第一个值,即使有其他行插入