在我的应用程序中,我想做类似
的事情1) INSERT INTO APPLICATION VALUES(...);
然后我想检索插入到APPLICATION表中的最后一条记录的ID(即AUTO_INCREMENT)并将其存储在另一个表中,如...
2) $last_rec = $this->con->query("SELECT ID FROM APPLICATION ORDER BY ID DESC LIMIT 1");
3) INSERT INTO INFO(A_ID, ...) VALUES($last_rec, ...);
我正在使用事务并且一切正常但我不确定是否另一个事务可以在第1步完成后在APPLICATION中插入一行,如果发生那么错误的APPLICATION.ID将存储在INFO.A_ID中
有关我应该如何处理这种情况的任何建议?
答案 0 :(得分:2)
阅读本文:http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html
“对于LAST_INSERT_ID()
,最新生成的ID
在每个连接的基础上维护在服务器中。它不会被其他客户端更改。
如果您使用非恶意值(即非NULL且不为0的值)更新另一个AUTO_INCREMENT
列,则甚至不会更改。
从多个客户端同时使用LAST_INSERT_ID()
和AUTO_INCREMENT
列完全有效。“
答案 1 :(得分:1)
我强烈建议不要使用LAST_INSERT_ID()
,因为如果在表格中同时插入,可能会引发错误的ID ...
例如......如果您有2个同时进行的交易并且您希望获得2个交易ID中的第1个..... last_insert_id()
将在此处失败,因为它不知道哪个是最后一个正确的插入
改为使用mysqli->insert_id
$result = $mysqli->query( /*insert query here */);
echo 'The ID is: '.$mysqli->insert_id;
参考: mysqli.insert-id