首页 > 开发 > ThinkPHP > 正文

thinkphp的事务问题

2024-09-09 15:20:20
字体:
来源:转载
供稿:网友

1、首先数据库是要支持事务的,如InnoDb,不支持的如Myisam.

2、作用:主要是为了在有关数据库的组合操作、多表操作中,都需要进行数据处理,以防数据丢失.

3、简单点的例子:a给b打钱,a数据库的钱应该减少,b数据库的钱应该增多,若a数据库操作成功,但是b的操作失败,这样就会出现问题.

4、事务是DBMS得执行单位,一般来说,事务是必须满足4个条件(ACID).

a.原子性(Autmic):事务在执行性,要做到“要么不做,要么全做”,不允许事务部分执行.

b.一致性(Consistency):事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态,修改的数据之间应该有所关联.

c.隔离性(Isolation):如果多个事务并发执行,应象各个事务独立执行一样.

d.持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复.

5、实例:

  1. //实例化的数据库对象 
  2.  
  3.           $model = new Model(); 
  4.  
  5.      //开启事务 
  6.  
  7.           $model->startTrans(); 
  8.  
  9.     //默认结果 
  10.  
  11.           $judge = true; 
  12.  
  13.    //数据操作 
  14.  
  15.          $sql1 ="delete  from TableOne  where ..."
  16.  
  17.          $sql2 ="delete  from TableTwo  where ..."
  18.  
  19.   //执行数据操作 
  20.  
  21.          $result1 = $model->query($sql1); 
  22.  
  23.          if(!$result1)  $judge = false; 
  24.  
  25.          $result2 = $model->query($sql2); 
  26.  
  27.          if(!$result2)  $judge = false; 
  28.  
  29.  
  30.  
  31.          if($judge){ 
  32.  
  33.              //如果2条都执行成功,则提交完成数据库操作 
  34. //Vevb.com 
  35.                $db->commit(); 
  36.  
  37.           }else
  38.  
  39.             //如果有其中一条执行失败,则rollback,所有数据还原到                   sql1和sql2都没执行的状态。 
  40.  
  41.                $db->rollback(); 
  42.  
  43.          }

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选