关于Yii2 Mysql 事务不能回滚的原因排查

Yii框架 · Fecmall · 于 4年前 发布 · 1588 次阅读

在使用Yii2事务的时候,发现事务不能回滚,代码如下:

$connection = Yii::$app->db;
        $transaction = $connection->beginTransaction();
        $sql = "ALTER TABLE user ADD COLUMN name varchar(48);";
        $connection->createCommand($sql)->execute();
        $model = Yii::$service->extension->getByPrimaryKey(1);
        $model->price = 8;
        $model->save();
        $transaction->rollBack();

发现事务不能回滚,但是当我把代码改成

		$connection = Yii::$app->db;
        $transaction = $connection->beginTransaction();
        //$sql = "ALTER TABLE user ADD COLUMN name varchar(48);";
        //$connection->createCommand($sql)->execute();
        $model = Yii::$service->extension->getByPrimaryKey(1);
        $model->price = 8;
        $model->save();
        $transaction->rollBack();

发现可以回滚,查了一下资料,发现ALTER 语句,也就是修改表结构之类的sql是不可以回滚的,只有增删改表里面的数据才可以回滚。

总结: Mysql事务操作,只要有一条sql进行了表结构的修改(ALTER等语句),那么全部不能回滚。

共收到 0 条回复
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics