求问,php使用mysql的事务回滚问题

寻梦资源网 2018-10-27 02:05:53
请问,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能否回滚删除的数据表(好像不能,不太确定,上面的代码测试猜的。。。求告知。)?
...全文
402 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_36816479 2018-10-30
  • 打赏
  • 举报
回复
寻梦资源网 2018-10-27
  • 打赏
  • 举报
回复
引用 2 楼 qq_23033339 的回复:
为什么会有删除表的操作呢?是设计的问题还是需求的问题,不建议在代码里面删除表

,实在要删除 你可以放在commit 前面就行了,删除失败你就回滚,删除成功就直接提交了

需求问题,因为要根据那两个表的数据信息来删除那个数据表。后来试了一下,把那个删除表的语句放在结尾了,回滚成功了。放在上面代码的位置就不行。。。
寻梦资源网 2018-10-27
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
表都没有了,还会滚什么?
回滚是针对记录的,并且 MySQL 也不建议你使用事务,因为他比非事务表处理慢3~5倍

是两个表,删除a表和b表的数据,也是这两个表需要回滚。删除表是根据那两个表的数据而删除的。
下雨的声音丶 2018-10-27
  • 打赏
  • 举报
回复
为什么会有删除表的操作呢?是设计的问题还是需求的问题,不建议在代码里面删除表 ,实在要删除 你可以放在commit 前面就行了,删除失败你就回滚,删除成功就直接提交了
xuzuning 2018-10-27
  • 打赏
  • 举报
回复
表都没有了,还会滚什么?
回滚是针对记录的,并且 MySQL 也不建议你使用事务,因为他比非事务表处理慢3~5倍

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧