Yii2中事务的使用

官方是这样的

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

其实可以这样使用

$transaction = Yii::$app->db->beginTransaction();
try {
    // ... executing other SQL statements ...
    $transaction->commit();
} catch (Exception $e) {
    $transaction->rollBack();
}

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

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

$db = new yiidbConnection([
    'dsn' => 'mysql:host=localhost;dbname=example',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
]);

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

return [
    // ...
    'components' => [
        // ...
        'db' => [
            'class' => 'yiidbConnection',
            'dsn' => 'mysql:host=localhost;dbname=example',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ],
    ],
    // ...
];

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

对于隔离级别,yiidbTransaction 也提前定义了几个常量:

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

可以直接使用

// 开启事务 隔离级别 串行化
$transaction = Yii::$app->db->beginTransaction( yiidbTransaction::SERIALIZABLE);

MySQL 事务隔离级别
忘了的可以看看这个

MySQL事务是不支持嵌套的,但是Yii2框架使用了缓存,可以使用事务嵌套,同学们可以打开下面链接看看
深入理解Yii2.0之事务(Transaction)
原文地址:https://www.cnblogs.com/niuben/p/11088532.html