MySQL的AUTO_INCREMENT不会回滚

93

我正在使用MySQL的AUTO_INCREMENT字段和InnoDB来支持事务。我注意到当我回滚事务时,AUTO_INCREMENT字段没有回滚?我发现这是设计上的问题,但有没有任何解决方法?


2
只是一点提示:但是在服务器重置后,auto_increment值将重置为该列的max+1。 - J.D. Fitz.Gerald
1
这不是仅适用于MySQL,Postgres的行为方式也相同。这些解释很有道理。 - Nils
11个回答

0
$masterConn = mysql_connect("localhost", "root", '');
mysql_select_db("sample", $masterConn);

for($i=1; $i<=10; $i++) {
    mysql_query("START TRANSACTION",$masterConn);
    $qry_insert = "INSERT INTO `customer` (id, `a`, `b`) VALUES (NULL, '$i', 'a')";
    mysql_query($qry_insert,$masterConn);
    if($i%2==1) mysql_query("COMMIT",$masterConn);
    else mysql_query("ROLLBACK",$masterConn);

    mysql_query("ALTER TABLE customer auto_increment = 1",$masterConn);

}



echo "Done";

不知道为什么被踩了...这解决了问题。 - Martin Zvarík
感谢Martin Zvarík的评论。 - frangly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接