LAST_INSERT_ID函数会失败吗?

时间:2013-03-23 11:50:46

标签: mysql

我在mysql数据库上有一个注册程序,它的工作原理如下:

INSERT INTO `tblusers` (`uname`, `upwd`, `umail`) VALUES (RU_UNAME, RU_UPWD, RU_UMAIL);
select LAST_INSERT_ID() into @newuserid;

-- then use the @newuserid to make some work on other tables.

现在我想知道它是否会得到错误的id特别是数据库将在其他表中有很多插入,然后它可能会获得插入用户和获取最后插入的id之间插入的另一个表的id ?

是否有可能失败?

2 个答案:

答案 0 :(得分:1)

总之,没有。与数据库的不同连接保持各自的LAST_INSERT_ID。因此,将记录插入tblusers的其他一些客户端不会影响您的LAST_INSERT_ID

来自documentation

  

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

documentation值得一读。它解释了很多细节。

答案 1 :(得分:0)

MySQL使用锁系统,它不允许2个进程(对脚本进行2次调用)来修改同一行。因此表格不会崩溃*,但MySQL可能无法在合理的时间内处理请求数量,请求将等待。您应始终尽可能快地优化查询。

所以,最后插入的id不会失败。