一次MySql事务执行回滚失败分析

在添加上限控制功能时,遇到事务回滚后数据库更改未恢复的问题。通过检查代码逻辑、GDB调试,发现是由于事务中创建表操作导致的隐式提交,从而无法正常回滚。重点介绍了MySQL的InnoDB和MyISAM表类型,以及可能导致隐式提交的SQL语句,提醒在设计事务时避免使用此类语句。
摘要由CSDN通过智能技术生成

前几天在添加一个上限控制功能时,发现在一次取资源超过限制之后,事务回滚,但该次操作造成的数据库更改并未回滚
按以下步骤进行分析:
1. 仔细检查代码逻辑,看是否由于事务回滚没有调用造成的脏数据
2. gdb单步调试程序,定位脏数据产生的时间点,回滚是否成功
3. 根据已有资料分析问题产生原因。


经过以上步骤分析,在单步时已经确认是由于事务中调用了create table造成的隐式提交,从而回滚时,无法按照预想回滚


知识点补充:
1.MySQL最常用的两个表类型: InnoDB和MyISAM。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持、存储过程、视图、行级锁定等等高级数据库功能,若回滚失败,先检查表类型。
2.有的时候有些SQL语句会产生一个隐式的提交操作,即执行完成这些语句后,会有一个隐式的COMMIT操作。有以下SQL语句,不用你去“管”:

  • DDL语句,ALTER DATABASE、ALTER EVENT、ALTER PROCEDURE、ALTER TABLE、ALTER VIEW、CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE等;
  • 修改MYSQL架构的语句,CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD;
  • 管理语句,ANALYZE TABLE、CACHE INDEX、CHECK TABLE、LOAD INDEX INTO CACHE、OPTIMIZE TABLE、RE
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值