数据库引擎导致的 —— spring事务回滚失败

文章讲述了在使用Spring进行事务处理时遇到回滚失败的问题,经分析发现是由于使用的MyISAM存储引擎不支持事务。作者提供了查询当前引擎和将MyISAM表改为InnoDB以支持事务的方法,以及如何在my.ini文件中更改默认引擎。
摘要由CSDN通过智能技术生成

 问题引入

在测试sprin事务遇到异常后的回滚操作时,发现回滚失败,仍然会扣钱。

 

 分析原因

一开始以为是代码的问题,仔细分析比对代码后发现没有错误,且其他人运行是可以正常实现回滚的。因此猜测是数据库的原因。

查找资料后发现,使用的mysql数据库有多种存储引擎,例如MyISAM、InnoDB等。而MyISAM是不支持事务的!!!

那怎么知道自己使用的是什么引擎呢?

查看使用引擎

使用sql语句如下,tbl_account为表名:

show create table tbl_account;

查询结果如下,ENGINE=InnoDB 说明使用的引擎是InnoDB。(此处是更改后的,我的原先是MyISAM

 更改引擎

有两种更改方法,一个是更改某个表的引擎,一个是更改默认的引擎(新建表所使用的)。

更改某个表的引擎

 使用sql语句如下,tbl_account为表名:

ALTER TABLE tbl_account ENGINE = InnoDB;

 

更改默认的引擎

找到mysql目录下的my.ini文件。

用记事本打开后,更改如下图所示(;代表注释):

最后再次执行前面的语句查看表的引擎,确认是否更改成功。更改成功后就可以成功实现事务回滚了。

(by 归忆)

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归忆_AC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值