mysql不同类型表的事务造成的一次困惑

昨晚、今早在调试天盈健系统设备配置功能的时候,发现一个很奇怪的现象,程序里保存的配置日志始终无法保存到数据库中,但是新录入用户或者修改用户信息是可以的。

      开始的时候怀疑是sql语句的问题,但是系统没报异常,且打印出sql语句后放在mysql客户端里是可以执行的

    然后怀疑是不是service,dao的问题,按照用户模块的功能配置了service,dao,还是无法保存到数据库

    然后怀疑是不是语句有没有被数据库执行,开启了日志后,发现所有的语句最后都有一个 rollback,事务回滚,没有提交。

mysql不同类型表的事务造成的一次困惑_第1张图片

这下找到问题了,是数据源配置的时候默认不自动提交,且dao层事务控制的不正确,导致数据没有保存到服务器。数据源配置为自动提交后,问题解决。

但是这又衍生出一个新的问题,为什么用户相关的表在没有自动提交的时候却可以正确的插入,修改?

经过对日志的分析,将sql语句放入mysql客户端执行,发现每个rollback语句执行完后都有一个WARNINGS, show WARNINGS后,发现如下信息:

查看了一下表类型,用户信息表是MyIsam类型,配置日志表是InnoDB类型,MyIsam类型的表不支持事务,数据插入、修改后无法回滚,而InnoDB类型的表支持事务,才导致这种情况。

看似令人困扰,实则学艺不精。惭愧,还需要努力呀。

你可能感兴趣的:(mysql不同类型表的事务造成的一次困惑)