mysql事务回滚的终极用法

刘德胜 3851次浏览

摘要:我们在操作数据库时,有时先查询一张表中的记录值后,将该表的记录删除,然后再用该表记录ID去修改另一张表数据,但是修改未成功,这时之前删除掉的想复然,似乎只能新加一条。特别是MYISAM表引擎的情况下,就上面问题,给出下面这段代码,希望能给你启示。<?ph...

我们在操作数据库时,有时先查询一张表中的记录值后,将该表的记录删除,然后再用该表记录ID去修改另一张表数据,但是修改未成功,这时之前删除掉的想复然,似乎只能新加一条。特别是MYISAM表引擎的情况下,就上面问题,给出下面这段代码,希望能给你启示。

<?php 
//将表设置为可事务回滚表
mysql_query("ALTER TABLE  `ldsa` ENGINE = INNODB");
mysql_query("ALTER TABLE  `ldsb` ENGINE = INNODB");
mysql_query("ALTER TABLE  `ldsc` ENGINE = INNODB");

//设置mysql不自动提交,需自行用commit语句提交
mysql_query("SET AUTOCOMMIT=0"); 

//mysql语句
$res1 = mysql_query("DELETE FROM `ldsa` WHERE id=$id");
$res2 = mysql_query("DELETE FROM `ldsb` WHERE id=$id");
$res3 = mysql_query("UPDATE `ldsb` SET `user`='lds' WHERE id=$id");

if ($res1 && $res2 && $res3) {
    mysql_query("COMMIT"); //提交事务
}else{
    mysql_query("ROLLBACK");
}

mysql_query("END");              //事务处理完时别忘记
mysql_query("SET AUTOCOMMIT=1"); //自动提交

//将表设置为可事务回滚表
mysql_query("ALTER TABLE  `ldsa` ENGINE = MYISAM");
mysql_query("ALTER TABLE  `ldsb` ENGINE = MYISAM");
mysql_query("ALTER TABLE  `ldsc` ENGINE = MYISAM");