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

用的yii1框架,我用wireshark抓了MySQL的查询包。首先是发送了:STARTTRANSACTION查询,然后后面有insert查询,最后也发送了ROLLBACK查询。但是我一看数据库,那个insert查询的数据在数据库里面有,这可能是怎么回事呀?
我发现里面调用了一个存储过程,存储过程里面有开始一个新的事物,然后提交。不会是这里影响的吧?存储过程是在insert语句前面调用的。
幕布斯7119047
浏览 468回答 2
2回答

开心每一天1111

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

饮歌长啸

搞清楚了,MySQL不支持嵌套事务,我这里一开始开始了一个事务,后面调用存储过程,里面也开启事务,这里会导致我上一个事务自动提交,然后insert,其实到了这里已经没有事务了,就是单条语句,所以会立即生效。后面的rollback也是无效的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript