来源: ThinkPHP学习笔记 事务处理 – Index – 开源中国社区
事务处理是数据库数据处理中经常用到的一个功能,特别是商务之类的应用,比如a给b打了钱,数据库中a的钱数应该减少,b的钱数应该增加,
若a数据操作成功,而b的数据因某些原因操作失败,这时数据就会有问题。这种相关的系列操作需要进行事务处理。
事务是DBMS得执行单位。一般来说,事务是必须满足4个条件(ACID):
1. 原子性(Autmic): 事务在执行性,要做到“要么不做,要么全做!”,不允许事务部分执行。
2. 一致性(Consistency): 事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态。修改的数据之间应该有所关联。
3. 隔离性(Isolation): 如果多个事务并发执行,应象各个事务独立执行一样。
4. 持久性(Durability): 一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复。
下面看Thinkphp的一个例子。
//实例化的数据库对象 $model = new Model(); //开启事务 $model->startTrans(); //默认结果 $judge = true; //数据操作 $sql1 ="delete from TableOne where ..."; $sql2 ="delete from TableTwo where ..."; //执行数据操作 $result1 = $model->query($sql1); if(!$result1) $judge = false; $result2 = $model->query($sql2); if(!$result2) $judge = false; if($judge){ //如果2条都执行成功,则提交完成数据库操作 $db->commit(); }else{ //如果有其中一条执行失败,则rollback,所有数据还原到sql1和sql2都没执行的状态。 $db->rollback(); }