如何在 Laravel 5.5 中设置事务隔离级别?

Nik*_*nko 5 php transactions isolation-level laravel

在带有 MySQL 的 laravel 5.5 中,我使用\Illuminate\Support\Facades\DB这种方式创建事务:

DB::transaction(function() {
    ...
});
Run Code Online (Sandbox Code Playgroud)

这种事务的隔离级别是什么,有没有办法显式设置它?

Lew*_*son 6

SqlLite 中的默认值是

'BEGIN IMMEDIATE TRANSACTION';
Run Code Online (Sandbox Code Playgroud)

MySQL 中的默认值是

'SET TRANSACTION ISOLATION LEVEL READ COMMITTED';
Run Code Online (Sandbox Code Playgroud)

你可以通过做这样的事情自己设置

$pdo = DB::connection()->getPdo();
$pdo->exec('SET TRANSACTION ISOLATION LEVEL READ COMMITTED');
Run Code Online (Sandbox Code Playgroud)

  • 默认隔离级别取决于 MySQL 版本。对于 5.7,它是:可重复读 (2认同)