Mysql+PHP的事物处理用例

事物处理用例

 

事务能确保工作单元内的所有操作都成功完成,否则事务将被中止,在故障点及以前的操作将回滚到以前的状态。

MySQL的事务处理功能在MYSIAM存储引擎中是不支持的,在InnoDB存储引擎中是支持的。

 

所以:确保涉及的数据表存储引擎是InnoDB

 

列举两例:

 

(一)后台审核申请表

 

框架:ThinkPHP

 

1.业务逻辑

在后台审核申请表时,要填写审核意见,勾选状态。

这里涉及到四张表。

apply,                       

market,                   

process,                           

process_remark      

查看这四张表的存储引擎是InnoDB

 

审核后,

更新apply中的审核状态status(通过,拒绝,修改)

process表中, 添加一条记录

process_remark表中, 添加一条记录

如果审核通过,market表中添加一条记录。拒绝和修改时,则不添加。

 

2.      主要代码

$adata = M(MODULE_NAME); // 或写为M('C_product_apply')

$adata->startTrans();  // 事务开始

$aid =$adata->save($data);  // 有更新才保存

if ($data['status'] == 1) {

    $market = M('C_product_market');

   …

    $mid =$market->add($mdata);

  }else{

    $mid =1; // 如果 状态值为 2,3 时

}

$process =M('C_product_process');

$pid = $process->add($pdata);

 

$remark =M('C_product_process_remark');

$rid = $remark->add($rdata);

 

if ($aid && $mid && $pid && $rid) {

    $adata->commit();   //成功,则提交

  } else {

    $adata->rollback();   //不成功,则回滚

  }

 

(二):

 

框架:不是ThinkPHP

 

1.      业务逻辑:

查询product_market表中market_at为当天的,按规则往另三张表插入记录。

这里涉及到四张表

product_market              

sele_buy

market_online               

user_stock_balance     

查看这四张表的存储引擎是InnoDB

 

2.主要代码

 

$GLOBALS['db']->query("STARTTRANSACTION");  // 事务开始

$GLOBALS['db']->autoExecute(DB_PREFIX."c_sell_buy",$sdata,"INSERT");

$sid = $GLOBALS['db']->insert_id();

$oid=$GLOBALS['db']->autoExecute(DB_PREFIX."c_product_market_online",$odata,"INSERT");

$bid =$GLOBALS['db']->autoExecute(DB_PREFIX."c_user_stock_balance",$bdata,"INSERT");

if ( $sid && $oid && $bid ){

   $GLOBALS['db']->query("COMMIT");  // 成功,则执行

    }else {

   $GLOBALS['db']->query('ROLLBACK');     //不成功,则返回

}


这是我在实际工作中用到的实例,如有不明白可以参考网上这一篇写得比较详细:

 http://www.cnblogs.com/ymy124/p/3718439.html

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值