Php 在事务的中间使用MySqLIxTytIdId()
如果我开始一个事务,并在其中插入多个Php 在事务的中间使用MySqLIxTytIdId(),php,mysql,Php,Mysql,如果我开始一个事务,并在其中插入多个INSERT(pre-COMMIT),mysql\u INSERT\u id()似乎不会在每个事务之后更新 这是预期的行为吗?如果是这样,我该怎么做才能得到我刚才插入的东西的ID?你的假设是错误的。下面是证明这一点的代码: mysql_query('CREATE TABLE `test` ( `ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `Name` v
INSERT
(pre-COMMIT
),mysql\u INSERT\u id()
似乎不会在每个事务之后更新
这是预期的行为吗?如果是这样,我该怎么做才能得到我刚才插入的东西的ID?你的假设是错误的。下面是证明这一点的代码:
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());
有趣的是,即使回滚事务(而不是提交事务),结果也将是相同的,并且这些ID的值将不再使用。因此,下一次插入将从4开始。Yep。。结果发现它只是没有插入新行
1
2
3