在事务中使用mysql_insert_id()

时间:2011-11-14 21:38:56

标签: php mysql

如果我开始一项交易,并在其中制作多个INSERT(前COMMIT),则mysql_insert_id()似乎不会在每个交易后更新。

这是预期的行为吗?如果是这样,我可以做些什么来获取我刚插入的东西的ID?

1 个答案:

答案 0 :(得分:5)

你的假设是错误的。以下代码证明了这一点:

mysql_query('CREATE TABLE `test` (
               `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
               `Name` varchar(255) NOT NULL,
                PRIMARY KEY (`ID`)
             ) ENGINE=InnoDB') or die(mysql_error());
mysql_query('SET AUTOCOMMIT=0') or die(mysql_error());
mysql_query('START TRANSACTION') or die(mysql_error());
mysql_query("INSERT INTO test VALUES (NULL, 'Martin')") or die(mysql_error());
echo mysql_insert_id().'<br />';
mysql_query("INSERT INTO test VALUES (NULL, 'Dani')") or die(mysql_error());
echo mysql_insert_id().'<br />';
mysql_query("INSERT INTO test VALUES (NULL, 'Pesho')") or die(mysql_error());
echo mysql_insert_id().'<br />';
mysql_query('COMMIT') or die(mysql_error());
mysql_query('SET AUTOCOMMIT=1') or die(mysql_error());

这个简单代码的输出是:

1
2
3

有趣的是,即使您回滚事务(而不是提交它),结果也是相同的,并且这些ID的值将永远不会再次使用。所以下一个插入将从4开始。