事务回滚无效,查看 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 方法是执行了的。
推荐文章: