如果我开始一项交易,并在其中制作多个INSERT
(前COMMIT
),则mysql_insert_id()
似乎不会在每个交易后更新。
这是预期的行为吗?如果是这样,我可以做些什么来获取我刚插入的东西的ID?
答案 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开始。