Mybatis3.1.1 Spring3.1.1 MySQL无法插入数据的问题

本文讲述了在使用Mybatis3.1.1和Spring3.1.1整合过程中,遇到的MySQL无法插入数据的问题。通过排查,发现并非Mybatis配置或事务管理问题,而是数据库表使用了InnoDB存储引擎导致。解决问题的关键在于切换到适合的存储引擎,最终将InnoDB改为MyISAM后,问题得到解决。文章还简述了MySQL各种存储引擎的特性和适用场景。

这算是首次开博了。从事IT这么多年一直没有写博的“好习惯”,以往碰到的问题,耗费的精力解决,但随时间都“磨灭”了。下决心开始写“时光记录”了。

为了满足项目最新分布式数据框架,主要目的水平切分,垂直切分,读写分离,可扩展数据架构。碰到都是“新”技术。


这次要整理Spring3.1.1和Mybatis3.1.1,使用 mybatis-spring-1.1.1。 编写的整合工程,使用Mybatis 动态代理生成DataMapper类型。注解测试类封装测试逻辑 ,包括查询、插入、删除逻辑。数据库使用的MySQL5.0。


测试工程的时候,问题就来了,查询功能没有问题,插入数据无效。

凭着经验分析,问题可能,

1.mybatis 配置问题。检查了org.mybatis.spring.SqlSessionFactoryBean,org.springframework.jdbc.datasource.DataSourceTransactionManager的配置没有问题,同时测试了重复插入数据时,也会报出主键冲突。说明数据是交给数据库引擎执行。

2.事务问题。基于上面的情况,考虑可能是事务的问题,网上查了相关资料,在spring自管理事务的情况没有发生过这种情,不太可能撞上“大运”。

事情到这时,几乎到了死胡同了,时间都耗费了好几个小时了。


后来想到,基于上面的结论,这跟应用框架应该没有关系,可能是数据库的问题。MySQL有很多存储引擎,以往的项目用MyISAM多,就检查了表的引擎属性,原来是InnoDB。改正过来,改正过来问题解决。

阿门,终于可以休息了。

附上Mysql 总结信息

Mysql 各种存储引擎的特性

特点

Myisam

BDB

Memory

InnoDB

Archive

存储限制

没有

没有

64TB

没有

事务安全

 

支持

 

支持

 

锁机制

表锁

页锁

表锁

行锁

行锁

B树索引

支持

支持

支持

支持

 

哈希索引

 

 

支持

支持

 

全文索引

支持

 

 

 

 

集群索引

 

 

 

支持

 

数据缓存

 

 

 

支持

 

索引缓存

 

 

支持

支持

 

数据可压缩

支持

 

 

 

支持

空间使用

不消耗空间

内存使用

中等

非常高

批量插入速度

非常高

支持外键

 

 

 

支持

 


最常用的存储引擎:

1.       Myisam存储引擎:每个Myisam在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别为.frm(存储表定义)、.MYD(存储数据)、.MYI(存储索引)。数据文件和索引文件可以放置在不同目录,平均分布io,获得更快的速度。

2.       InnoDB存储引擎:具有提交、回滚、奔溃恢复能力的事务安全。与Myisam相比,InnoDB的写效率差一些并且会占用更多的磁盘空间以保留数据和索引。

 

 如何选择合适的引擎及常用存储引擎适用的环境:

1.       Myisam:它是在Web、数据仓储和其他应用环境下最常使用的存储引擎。

2.       InnoDB:用于事务处理应用程序,具有更多特性,包括ACID事务特性。

3.       Memory:所有数据都存储在Ram中,在需要快速查找引用和其他类似数据环境下,可以极速访问。

4.       Merge:允许Mysql DBA(数据库管理人)或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用他们。对于世界仓储等环境十分合适。 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值