MySQL的事物怎么失效了?没有被回滚。

dyllen
  • 306

用的yii1框架,我用wireshark抓了MySQL的查询包。
首先是发送了:START TRANSACTION查询,然后后面有insert查询,最后也发送了ROLLBACK查询。
但是我一看数据库,那个insert查询的数据在数据库里面有,这可能是怎么回事呀?

我发现里面调用了一个存储过程,存储过程里面有开始一个新的事物,然后提交。不会是这里影响的吧?
存储过程是在insert语句前面调用的。

回复
阅读 2.6k
3 个回答

mysql不支持事务嵌套,如果存储过程里使用了事务,那在这一层就提交了事务,如果你的会话没有设置autocommit=0,那你的后面的insert单独就是一个事务,执行完就提交了,后面的rollback根本没用

dyllen
  • 306

搞清楚了,MySQL不支持嵌套事务,我这里一开始开始了一个事务,后面调用存储过程,里面也开启事务,这里会导致我上一个事务自动提交,然后insert,其实到了这里已经没有事务了,就是单条语句,所以会立即生效。后面的rollback也是无效的。

Function_Xu
  • 5
新手上路,请多包涵

表是InnoDB的么

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏