MySQL数据库事务嵌套

"这篇博客探讨了Yii框架如何在数据库连接中实现事务的管理和缓存。通过单例模式确保整个应用使用同一个数据库连接,并详细阐述了在`yiidbConnection`类中事务对象的获取和创建过程,强调了事务对象在应用生命周期中的延续性,这对于理解Yii框架中的事务嵌套至关重要。"

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般情况下,整个Yii应用使用了同一个数据库连接,或者说是使用了单例。

而在yii\db\Connection中,又对事务对象进行了缓存:

class Connection extends Component
{
// 保存当前连接的有效Transaction对象
private $_transaction;

// 已经缓存有事务对象,且事务对象有效,则返回该事务对象
// 否则返回null
public function getTransaction()
{
    return $this->_transaction && $this->_transaction->getIsActive() ? $this->_transaction : null;
}

// 看看启用事务时,是如何使用事务对象的
public function beginTransaction($isolationLevel = null)
{
    $this->open();
    // 缓存的事务对象有效,则使用缓存中的事务对象
    // 否则创建一个新的事务对象
    if (($transaction = $this->getTransaction()) === null) {
        $transaction = $this->_transaction = new Transaction(['db' => $this]);
    }
    $transaction->begin($isolationLevel);
    return $transaction;
}

}
因此,可以认为整个Yii应用,使用了同一个 Transaction 对象,也就是说, Transaction::_level 在整个应用的生命周期中,是有延续性的。 这是实现事务嵌套的关键和前提。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值