官方是这样的

  1. // $connection其实是数据库连接
    $transaction = $connection->beginTransaction();
  2. try {
  3. $connection->createCommand($sql1)->execute();
  4. $connection->createCommand($sql2)->execute();
  5. // ... executing other SQL statements ...
  6. $transaction->commit();
  7. } catch (Exception $e) {
  8. $transaction->rollBack();
  9. }

其实可以这样使用

  1. $transaction = Yii::$app->db->beginTransaction();
  2. try {
  3. // ... executing other SQL statements ...
  4. $transaction->commit();
  5. } catch (\Exception $e) {
  6. $transaction->rollBack();
  7. }

(原因)创建数据库连接(Creating DB Connections)

想要访问数据库,你首先需要通过创建一个 yii\db\Connection 实例来与之建立连接。

  1. $db = new yii\db\Connection([
  2. 'dsn' => 'mysql:host=localhost;dbname=example',
  3. 'username' => 'root',
  4. 'password' => '',
  5. 'charset' => 'utf8',
  6. ]);

因为数据库连接经常需要在多个地方使用到, 一个常见的做法是以应用组件的方式来配置它,如下:

  1. return [
  2. // ...
  3. 'components' => [
  4. // ...
  5. 'db' => [
  6. 'class' => 'yii\db\Connection',
  7. 'dsn' => 'mysql:host=localhost;dbname=example',
  8. 'username' => 'root',
  9. 'password' => '',
  10. 'charset' => 'utf8',
  11. ],
  12. ],
  13. // ...
  14. ];

之后你就可以通过语句 Yii::$app->db 来使用数据库连接了。

对于隔离级别,yii\db\Transaction 也提前定义了几个常量:

  1. const READ_UNCOMMITTED = 'READ UNCOMMITTED';    // 读未提交
  2. const READ_COMMITTED = 'READ COMMITTED';      // 读提交
  3. const REPEATABLE_READ = 'REPEATABLE READ';     // 可重复读
  4. const SERIALIZABLE = 'SERIALIZABLE';        // 串行化

可以直接使用

  1. // 开启事务 隔离级别 串行化
  2. $transaction = Yii::$app->db->beginTransaction( yii\db\Transaction::SERIALIZABLE);
  1. MySQL 事务隔离级别忘了的可以看看这个
  2.  
  3. MySQL事务是不支持嵌套的,但是Yii2框架使用了缓存,可以使用事务嵌套,同学们可以打开下面链接看看
    深入理解Yii2.0之事务(Transaction)

Yii2中事务的使用的更多相关文章

  1. yii2中事务不能回滚的解决

    $player1 = Player::findOne(1); $player1->nickname = '111'; $player2 = Player::findOne(2); $player ...

  2. YII2中操作数据库的方式

    一.以createCommand方式: // YII2中通过createCommand来处理数据库 // 查询多条记录 // {{%user}} 表示如果设置了表前缀,YII会自动帮你替换 $data ...

  3. Hibernate中事务的隔离级别设置

    Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下

  4. yii2中如何使用modal弹窗之基本使用

    作者:白狼 出处:http://www.manks.top/yii2_modal_baseuse.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接, ...

  5. SQL Server中事务、锁定和阻塞

    事务是什么 在SQL Server中事务是构成一个工作逻辑单元的一系列任务,也就说多个任务放在一起执行,这些任务要么全部执行成功,要么全部执行失败. 通过事务我们可以保证数据的完整性,例如:用户A给用 ...

  6. Yii2中多表关联查询(join、joinwith)

    我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order      (id  order_name ...

  7. PHP在yii2中封装SuperSlide 幻灯片编写自己的SuperSlideWidget的例子

    因为近期给朋友公司做个门户网站,把荒置了6.7年的PHP又重新拾起,发现PHP这些年兴旺多了,很多新的东西看的不明不白,研究了几个框架ZendFramework.thinkphp.Symfony.yi ...

  8. [moka同学笔记]Yii2中多表关联查询(join、joinwith) (摘录)

    表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_name       cu ...

  9. Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)(转)

    我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_ ...

随机推荐

  1. SSM+layui实现增删改查

    前端使用layui框架,后端使用Spring+SpringMVC+Mybatis的集合框架,数据库使用MySQL,完成对一张用户表的增删改查操作. 前后端分离开发,即前端的HTML页面通过ajax技术 ...

  2. C# asp.net 连接Mysql 数据库

    首先添加 引用: using System.Data;using MySql.Data.MySqlClient; 代码: 这里只写了 后台代码 Mysql 连接和sql 连接代码几乎一样 只要把 My ...

  3. format的使用

    v="敬爱可亲的{0},最喜欢在{1}地方干{2}" name1=input("名字>") lang=input("地点>") ...

  4. bugku 这么多数据包

    看到之后有点懵逼 然后下载 下载之后发现是一个pacp后缀的流量数据包 然后用wireshark 然后只想到了 http过滤 然后发现不对 然后参考其他人的博客 经大佬提示, 一般 getshell ...

  5. 洛谷P1582 倒水 二进制的相关应用

    https://www.luogu.org/problem/P1582 #include<bits/stdc++.h> using namespace std; long long N,K ...

  6. logging日志模块_python

    一.logging模块 1.功能 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设 ...

  7. 微信公众号h5页面alert去掉域名

    h5页面内嵌到微信公众号提示信息alert的时候会显示域名,去掉域名显示重写alert方法: window.alert = function(name){ var iframe = document. ...

  8. [CF484D] Kindergarten - 贪心

    有一组数,你要把他分成若干连续段.每一段的值,定义为这一段 数中最大值与最小值的差. 求一种分法,使得这若干段的值的和最大. N < 1e6, a[i] < 1e9. 朴素的\(O(n^2 ...

  9. Tomcat解压版-环境配置

    [问题]Tomcat解压版在本地后,双击双击startup.bat,闪退 [解决办法]    1.在已解压的tomcat的bin文件夹下找到startup.bat,右击->编辑.在文件头加入下面 ...

  10. sql developer执行sql文件

    sql语句可以直接copy到sqlDeveloper的sql window中执行,但是当sql语句过多时,我们可以在command window中来执行sql文件 具体的命令是: start d:\m ...