请问,mysql数据库事务回滚无效怎么回事儿?
$model = model('Model');
$model->startTrans();
try {
$modelIfno = $model->find(['id'=>$id]);
$tableName = config('database.prefix') . $modelIfno['table_name']; /* 这两句不注销不会回滚,注销则没有问题
$sql = "DROP TABLE {$tableName}";// 删除表
$resSql = $model->execute($sql);
*/ $res = $model->where(['id' => $id])->delete();// 删除模型
// 删除栏目
$cateRes = model('cateType')->where(['mode_id' => 200])->delete();
$model->commit();
} catch (\Exception $e) {
$model->rollback();
return $this->result('', '0', '删除模型失败');
}上面我写的代码,sql语句不注销就会直接删除传过来的表,并删除模型数据,出错不会回滚;
然后,注销掉那两句sql则会执行回滚。(栏目是故意写错的。)
不知道回滚失败的原因是什么?是删除表阻碍了?
顺便问一下mysql能否回滚删除的数据表(好像不能,不太确定,上面的代码测试猜的求告知。)?
$model = model('Model');
$model->startTrans();
try {
$modelIfno = $model->find(['id'=>$id]);
$tableName = config('database.prefix') . $modelIfno['table_name']; /* 这两句不注销不会回滚,注销则没有问题
$sql = "DROP TABLE {$tableName}";// 删除表
$resSql = $model->execute($sql);
*/ $res = $model->where(['id' => $id])->delete();// 删除模型
// 删除栏目
$cateRes = model('cateType')->where(['mode_id' => 200])->delete();
$model->commit();
} catch (\Exception $e) {
$model->rollback();
return $this->result('', '0', '删除模型失败');
}上面我写的代码,sql语句不注销就会直接删除传过来的表,并删除模型数据,出错不会回滚;
然后,注销掉那两句sql则会执行回滚。(栏目是故意写错的。)
不知道回滚失败的原因是什么?是删除表阻碍了?
顺便问一下mysql能否回滚删除的数据表(好像不能,不太确定,上面的代码测试猜的求告知。)?
回滚是针对记录的,并且 MySQL 也不建议你使用事务,因为他比非事务表处理慢3~5倍