今天遇到了mybatis执行增删改时,没有通过事务提交,即sqlSession.commit();sql语句就直接完成了对数据库的操作,首先怀疑了sqlSession的默认设置问题,是否是自动提交,排查之后,发现是数据库的引擎问题,将表数据提取之后,将引擎从MyIsAM改为了Inodb引擎,
各个数据库引擎直接的区别
-
MyISAM这种存储引擎不支持事务。
MyISAM是mysql最常用的存储引擎,但是这种引擎不是默认的
它管理的表具有以下特征:使用三个文件表示每个表
- 格式文件-存储表结构的定义(table.frm)
- 数据文件-存储表行的内容(table.MYD)
- 索引文件-存储表上索引(table.MYI)
灵活的auto_increment处理
可被压缩,只读表来节省空间
优点:可被压缩,节省存储空间。并且可以转换为只读表,提高检索效率
缺点:不支持事务
-
InnoDB存储引擎
优点:支持事务,行级锁、外键等。这种存储引擎数据的安全得到保障。
表的结构存储在xxx.frm文件中
数据存储在tablespace这样的表空间(逻辑概念),无法被压缩,无法转换成只读
这种InnoDB存储引擎在数据库崩溃之后提供自动恢复机制。
InnoDB支持级联删除和级联更新。
-
MEMORY存储引擎
缺点:不支持事务。数据容易丢。因为所有数据和索引都是存储在内存当中。
优点:查询速度最快。
以前叫做HEPA引擎