事务回滚无效,查看 MySQL general_log,发现压根没有事务语句的影子,怎么办?
DB::beginTransaction();
try {
操作1;
操作2;
DB::commit();
} catch {
DB::rollBack();
}
用的是这种形式,故意让操作2抛出异常(insert的时候字段不对),发现操作1的记录依然入库了,并没有回滚掉。
开启mysql的general_log,发现只有操作1的语句,并没有诸如‘set auto commit = 0’,‘ roll back’之类的记录,甚至连产生了报错的操作2的insert语句都没看到(我不知道这个是否应该有,可能是无关条件)
故意手动在操作1与操作2之前抛出异常触发roolback也同样无效。
PS:在DB::rollBack();前后插入了Log语句,确认rollback方法是执行了的。
自己破案了
https://blog.csdn.net/mathphp/article/deta...
搞了半天是因为用了双数据库链接的原因
多亏了这篇文章
留下这个回答免得后人走冤枉路 :sob:这官方文档写的,搞死人