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

 问题引入

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

 分析原因

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

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

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

查看使用引擎

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

show create table tbl_account;

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

扫描二维码关注公众号,回复: 17353490 查看本文章

 更改引擎

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

更改某个表的引擎

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

ALTER TABLE tbl_account ENGINE = InnoDB;

更改默认的引擎

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

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

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

(by 归忆)

猜你喜欢

转载自blog.csdn.net/qq1677852098/article/details/134896235