• 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'; }
    其中要注意一点的是,catch里面的抛出异常,Exception前面要加上一个‘’,不然的话在框架里面他会找不到这个类,然后就不会抛出异常。框架就会直接报错,起不到事务的作用。


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

  • 相关阅读:
    Visual Studio统计有效代码行数
    Release 下调试代码设置 (VS2005/2008)(转)
    vs2008编译出来的程序不能运行或需要安装vcredist_x86.exe才能运行解决办法
    优化3D图形流水线
    (转)地形碰撞高度计算
    stlport调试watch查看容器里面的值
    JavaScript调试、测试和发布工具
    MYGUI/CEGUI中文输入的问题
    jar包的生成及运行
    安卓百度地图开发so文件引用失败问题研究
  • 原文地址:https://www.cnblogs.com/dereckbu/p/7762971.html
Copyright © 2020-2023  润新知