Class yii\db\Transaction

继承yii\db\Transaction » yii\base\BaseObject
实现yii\base\Configurable
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/db/Transaction.php

Transaction 表示一个数据库事务.

它通常通过调用 yii\db\Connection::beginTransaction() 来创建.

以下代码是使用事务的典型示例(请注意, 某些 DBMS 可能不支持事务):

$transaction = $connection->beginTransaction();
try {
    $connection->createCommand($sql1)->execute();
    $connection->createCommand($sql2)->execute();
    //.... other SQL executions
    $transaction->commit();
} catch (\Exception $e) {
    $transaction->rollBack();
    throw $e;
} catch (\Throwable $e) {
    $transaction->rollBack();
    throw $e;
}

Note: 在上面的代码中, 我们有两个 catch 块, 用于与 PHP 5.x 和 PHP 7.x 兼容. 自 PHP 7.0 起, \Exception就实现了 \Throwable 接口, 因此, 如果你的应用仅使用 PHP 7.0 以及更高版本, 则可以跳过带有\Exception的部分.

公共属性

隐藏继承的属性

属性类型描述定义在
$db yii\db\Connection 与该事务关联的数据库连接. yii\db\Transaction
$isActive boolean 该事务是否处于活动状态. 只有活动的事务可以 commit()rollBack(). 该属性是只读的. yii\db\Transaction
$isolationLevel string 用于此事务的事务隔离级别. 这可以是 READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READSERIALIZABLE 之一, 也可以是包含SET TRANSACTION ISOLATION LEVEL之后使用的 DBMS 特定语法的字符串. 该属性是只写的. yii\db\Transaction
$level integer 当前事务的嵌套级别. 该属性是只读的. yii\db\Transaction

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的已命名方法. yii\base\BaseObject
__construct() 构造函数. yii\base\BaseObject
__get() 返回对象属性的值. yii\base\BaseObject
__isset() 检查属性是否已设置, 即已定义且不为null. yii\base\BaseObject
__set() 设置对象属性的值. yii\base\BaseObject
__unset() 将对象属性设置为null. yii\base\BaseObject
begin() 开始一个事务. yii\db\Transaction
canGetProperty() 返回一个值, 指示属性是否可读. yii\base\BaseObject
canSetProperty() 返回一个值, 指示属性是否可写. yii\base\BaseObject
className() 返回此类的完全限定名称. yii\base\BaseObject
commit() 提交事务. yii\db\Transaction
getIsActive() 返回一个值, 该值指示该事务是否处于活动状态. yii\db\Transaction
getLevel() yii\db\Transaction
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\BaseObject
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\BaseObject
init() 初始化对象. yii\base\BaseObject
rollBack() 回滚事务. yii\db\Transaction
setIsolationLevel() 设置此事务的事务隔离级别. yii\db\Transaction

常量

隐藏继承的常量

常量描述定义在
READ_COMMITTED 'READ COMMITTED' 表示事务隔离级别READ COMMITTED的常量. yii\db\Transaction
READ_UNCOMMITTED 'READ UNCOMMITTED' 表示事务隔离级别READ UNCOMMITTED的常量. yii\db\Transaction
REPEATABLE_READ 'REPEATABLE READ' 表示事务隔离级别REPEATABLE READ的常量. yii\db\Transaction
SERIALIZABLE 'SERIALIZABLE' 表示事务隔离级别SERIALIZABLE的常量. yii\db\Transaction

属性详情

$db public 属性

与该事务关联的数据库连接.

public yii\db\Connection $db null
$isActive public 属性

该事务是否处于活动状态. 只有活动的事务可以 commit()rollBack(). 该属性是只读的.

public boolean $isActive null
$isolationLevel public 属性

用于此事务的事务隔离级别. 这可以是 READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READSERIALIZABLE 之一, 也可以是包含SET TRANSACTION ISOLATION LEVEL之后使用的 DBMS 特定语法的字符串. 该属性是只写的.

public string $isolationLevel null
$level public 属性

当前事务的嵌套级别. 该属性是只读的.

public integer $level null

方法详情

begin() public 方法

开始一个事务.

public void begin ( $isolationLevel null )
$isolationLevel string|null

用于此事务的 [隔离级别][]. 这可以是 READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READSERIALIZABLE 之一, 也可以是包含在SET TRANSACTION ISOLATION LEVEL之后使用的 DBMS 特定语法的字符串. 如果未指定(null), 则不会明确设置隔离级别, 并且将使用 DBMS 默认值.

Note: 此设置不适用于 PostgreSQL, 因为在 PostgreSQL 之前设置隔离级别无效. 在这种情况下, 你必须在事务开始后调用 setIsolationLevel().

Note: 某些 DBMS 仅允许为整个连接设置隔离级别, 因此即使你未知道任务隔离级别, 后续事务也可能获得相同的隔离级别. 使用此功能时, 可能需要明确设置所有事务的隔离级别, 以避免设置冲突. 在撰写本文时, 受影响的 DBMS 是 MSSQL 和 SQLite.

从版本 2.0.16 开始, 当开始嵌套事务且基础 DBMS 不支持保存点时, 此方法将抛出异常.

throws yii\base\InvalidConfigException

如果 $dbnull.

throws yii\base\NotSupportedException

如果 DBMS 不支持嵌套事务.

throws yii\db\Exception

如果数据库连接失败.

commit() public 方法

提交事务.

public void commit ( )
throws yii\db\Exception

如果事务不是活动的.

getIsActive() public 方法

返回一个值, 该值指示该事务是否处于活动状态.

public boolean getIsActive ( )
return boolean

该事务是否处于活动状态. 只有活动的事务可以 commit()rollBack().

getLevel() public 方法 (可用自版本: 2.0.8)

public integer getLevel ( )
return integer

当前事务的嵌套级别.

rollBack() public 方法

回滚事务.

public void rollBack ( )
setIsolationLevel() public 方法

设置此事务的事务隔离级别.

当事务已经处于活动状态时, 可以使用此方法来设置隔离级别. 但是, 并非所有 DBMS 都支持此功能, 因此你可以在调用 begin() 时指定隔离级别.

参见 http://en.wikipedia.org/wiki/Isolation_(database_systems)#Isolation_levels.

public void setIsolationLevel ( $level )
$level string

用于此事务的事务隔离级别. 这可以是 READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READSERIALIZABLE 之一, 也可以是包含SET TRANSACTION ISOLATION LEVEL之后使用的 DBMS 特定语法的字符串.

throws yii\db\Exception

如果事务不是活动的.