事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销。
要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依旧是未修改之前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚。
数据库事务是由一组 SQL 语句组成的一个逻辑工作单元。您可以把事务看作是一组不可分的 SQL 语句,这些语句作为一个整体对数据库进行操作或一并撤销。比如在银行帐户之间转移资金:一条 UPDATE 语句将从一个帐户的资金总数中减去一部分,另一条 UPDATE 语句将把资金加到另一个帐户中。减操作和加操作必须永久记录在数据库中,或者必须一并撤销,否则将损失资金。这个简单的示例仅使用了两条 UPDATE 语句,一个更实际的事务往往包含了许多 INSERT、UPDATE和 DELETE 语句。
MySql数据库默认的数据库引擎是MyISAM,是不支持事务的,所以首先要更改数据库引擎:
alter table tableName engine=InnoDB;
事务回滚:
mysql_query("BEGIN");//或者mysql_query("START TRANSACTION");
$sql1 = "INSERT INTO Test_A(site,url) values('ABCD数据库','http://www.office68.com/')";
$sql2 = "INSERT INTO Test_B(site,url) values('ABCD数据库','http://www.office68.com/')";
$res1 = mysql_query($sql1);
$res2 = mysql_query($sql2);
if($res1 && $res2){
mysql_query("COMMIT");
echo '提交成功';
}else{
mysql_query("ROLLBACK");
echo '数据回滚';
}
mysql_query("END");