在使用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等语句),那么全部不能回滚。