还是那句话,默认使用InnoDB,就不会遇到乱七八糟的问题。

之前一篇心得讨论了一下MySQL存储引擎MyISAM与InnoDB的区别,谈到MyISAM这个引擎是不支持事务的,我当时就联想到spring的事务了。

一、问题场景

说到底spring事务是使用spring中的aop实现的,很有可能需要利用到数据库本身的事务回滚特性,那么使用MyISAM引擎的表到底支不支持spring事务呢?

二、尝试解决

所以我马上使用以前的项目来实验了一下,原来的项目参照:

spring 事务管理(二)声明式事务

然后我使用:

alter table table_name engine=MyISAM;

直接把表转成MyISAM了。

之后我试了一下同时买两本书的情况,一本买得起一本买不起,虽然没有报错,但是数据库完全没有回滚,第一本书依然是购买了的状态。

所以可知,spring的事务处理遇到MyISAM会失效,需要小心。

三、总结

幸好没在开发的时候遇到这个坑,不然又要被坑好久了!以后在使用事务的时候一定要注意表的引擎!

发表评论

电子邮件地址不会被公开。 必填项已用*标注