laravel框架中的MySQL事务处理 阿星小栈

laravel框架中的MySQL事务处理

在操作数据库中,实现一个功能时有时候会多次操作数据库,在多次操作数据库时,就会有可能出现其中一条sql语句执行成功,而另一条sql语句执行失败。这样的话就会出现很严重的问题,所以可以用MySQL的实物处理来解决这个问题。

laravel中的事物:

假如说:有一个用户表(user)

里面有两个字段,username,password

password字段设置为char(32),固定长度。

现在想要一次性插入两个用户:

通常执行sql语句(就是直接写两句):

$user1 = DB::table('user')->insert(['uname'=>'user1','password'=>'111']);
$user2 = DB::table('user')->insert(['uname'=>'user2','password'=>'222']);

这样一般都执行成功!!!

但是如果在开发业务逻辑时,会出现下面的情况:

$user1 = DB::table('user')->insert(['uname'=>'user1','password'=>'111']);
$user2 = DB::table('user')->insert(['uname'=>'user2','password'=>'22222222222222222222222222222222']);

在第二条sql语句中password字段的长度是33位的长度,这样肯定会报错

如果正常情况不用事物处理的话,肯定是插入的一个用户。

使用事物后应该是:

第一步、开启事务:

DB::beginTransaction();

第二步、执行成功时提交事务,失败时回滚

DB::commit();//成功,提交事务
DB::rollBack();//失败,回滚事务
eg:
DB::beginTransaction();
    try {
        $user1 = DB::table('user')->insert(['uname'=>'user1','password'=>'111']);
        $user2 = DB::table('user')->insert(['uname'=>'user2','password'=>'222222222222222']);
        if($user1&&$user2){
            DB::commit();
            echo 'success';
        }
    } catch (\Exception $e) {
        DB::rollBack();
        echo 'error';
    }
DB::beginTransaction();
    try {
        $user1 = DB::table('user')->insert(['uname'=>'user1','password'=>'111']);
        $user2 = DB::table('user')->insert(['uname'=>'user2','password'=>'222222222222222']);
        if($user1&&$user2){
            DB::commit();
            echo 'success';
        }
    } catch (\Exception $e) {
        DB::rollBack();
        echo 'error';
    }

其中要注意一点的是,catch里面的抛出异常,Exception前面要加上一个‘\’,不然的话在框架里面他会找不到这个类,然后就不会抛出异常。框架就会直接报错,起不到事务的作用。
 

 

 

 

 

 

转自:http://blog.csdn.net/iloveyougirls/article/details/71436558

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值