使用MySQL时。假设发现事务无法回滚,但Hibernate、Spring、JDBC等配置又没有明显问题时。不要苦恼,先看看MySQL创建的表有没有问题。即表的类型。

InnoDB和MyISAM是在使用MySQL最经常使用的两个表类型,各有优缺点,视详细应用而定。

主要的区别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。

MyISAM类型的表强调的是性能,其运行数度比InnoDB类型更快,可是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

MyIASM是IASM表的新版本号,有例如以下扩展:

二进制层次的可移植性。

NULL列索引。

对变长行比ISAM表有更少的碎片。

支持大文件。

更好的索引压缩。

更好的键吗统计分布。

更好和更快的auto_increment处理。

下面是一些细节和详细实现的区别:

1. InnoDB不支持FULLTEXT类型的索引。

2. InnoDB中不保存表的详细行数。也就是说,运行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行。可是MyISAM仅仅要简单的读出保存好的行数就可以。注意的是,当count(*)语句包括where条件时,两种表的操作是一样的。

3. 对于AUTO_INCREMENT类型的字段。InnoDB中必须包括仅仅有该字段的索引,可是在MyISAM表中,能够和其它字段一起建立联合索引。

4. DELETE FROM table时,InnoDB不会又一次建立表。而是一行一行的删除。

5. LOAD TABLE FROM MASTER操作对InnoDB是不起作用的。解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,可是对于使用的额外的InnoDB特性(比如外键)的表不适用。

另外,InnoDB表的行锁也不是绝对的,假设在运行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表相同会锁全表,比如update table set num=1 where name like “%aaa%”

不论什么一种表都不是万能的,仅仅用恰当的针对业务类型来选择合适的表类型,才干最大的发挥MySQL的性能优势。

在MySQL 5.0里面,MyISAM和InnoDB存储引擎性能区别并非非常大,针对InnoDB来说,影响性能的主要是 innodb_flush_log_at_trx_commit 这个选项,假设设置为1的话,那么每次插入数据的时候都会自己主动提交,导致性能急剧下降,应该是跟刷新日志有关系,设置为0效率可以看到明显提升,当然。相同你可以SQL中提交“SET AUTOCOMMIT = 0”来设置达到好的性能。另外。还听说通过设置innodb_buffer_pool_size可以提升InnoDB的性能,可是我測试发现没有特别明显的提升。

基本上我们可以考虑使用InnoDB来替代我们的MyISAM引擎了。由于InnoDB自身非常多良好的特点,比方事务支持、存储过程、视图、行级锁定等等,在并发非常多的情况下。相信InnoDB的表现肯定要比MyISAM强非常多。当然,对应的在my.cnf中的配置也是比較关键的。良好的配置,可以有效的加速你的应用。

MySql事务无法回滚的原因的更多相关文章

  1. Spring+hibernate+mysql事物不回滚的原因以及处理

    最近项目突然出了点问题,然后发现用Service层下面的一个类的一个方法里的事务居然没有回滚.然后自己写了一个测试方法经过了N次测试都是不回滚.以下是测试方法的一部分: @Transactional( ...

  2. 第二百八十六节,MySQL数据库-MySQL事务操作(回滚)

    MySQL数据库-MySQL事务操作(回滚) 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性. 举例:有这样一张表 从表里可以看出张 ...

  3. spring + mybatis 注解式事务不回滚的原因分析 @Transactional

    在一个项目中发现spring的事务无法回滚. DEBUG: org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.ses ...

  4. MySQL事务部分回滚-回滚到指定保存点

    我们可以在mysql事务处理过程中定义保存点(SAVEPOINT),然后回滚到指定的保存点前的状态. 定义保存点,以及回滚到指定保存点前状态的语法如下. 定义保存点---SAVEPOINT 保存点名; ...

  5. Java事务不回滚的原因总结

    1.首先要检查数据的引擎,InnoDB支持事务,MyIsam不支持事务 2.  默认spring事务只在发生未被捕获的 runtimeexcetpion时才回滚.     spring aop  异常 ...

  6. SSM框架中,事务无法回滚的原因和解决

    原因: 由ServletContextListener加载spring配置文件产生的是父容器,springMVC产生的是子容器,子容器对Controller进行扫描装配时装配了@Service注解的实 ...

  7. Spring事务不回滚原因分析

    Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离. 在我完成一个项目的时候,遇到了一个Spring事务不回滚的问题,通过aspectJ和@Transacti ...

  8. Spring,SpringMvc配置常见的坑,注解的使用注意事项,applicationContext.xml和spring.mvc.xml配置注意事项,spring中的事务失效,事务不回滚原因

    1.Spring中的applicationContext.xml配置错误导致的异常 异常信息: org.apache.ibatis.binding.BindingException: Invalid ...

  9. spring@Transactional注解事务不回滚不起作用无效的问题处理

    这几天在项目里面发现我使用@Transactional注解事务之后,抛了异常居然不回滚.后来终于找到了原因. 如果你也出现了这种情况,可以从下面开始排查. 一.特性先来了解一下@Transaction ...

随机推荐

  1. You have not agreed to the Xcode license.

    You have not agreed to the Xcode license. Before running the installer again please agree to the lic ...

  2. Android Fragment StartActivityForresult调用实例

    fragment里面的onActivityResult 怎样才能被调用,很简单,就一句话, startActivityForResult(intent, getActivity().RESULT_FI ...

  3. web前端-html学习笔记

    学习html最重要的是坚持.细心.多动手.慕课网<HTML+CSS基础课程>的笔记. 1.<h1>网站标题</h1> 如:<h1>腾讯网</h1& ...

  4. how to install git 1.8 rpm

    git版本在低于1.8之前,对于私有项目会出现401的pull失败错误,只能通过升级git版本来解决 It appears that git18 is no longer available from ...

  5. 定时自动备份mysql数据库

    新建备份文件并赋予可以执行的权限 mkdir -p /home/mysql_backup/ touch /home/mysql_backup/mysql_backup.sh chmod 551 /ho ...

  6. Java 拾遗

    1.选择表达式中的类型转换 public class Test { public void static main(String args[]){ int i = 5; System.out.prin ...

  7. PostCss 从0开始

    PostCss 摘自 http://ju.outofmemory.cn/entry/215105 http://www.w3cplus.com/PostCSS/postcss-deep-dive-pr ...

  8. 重置出错?微软Win10平板Surface Pro 4重装系统教程详解

    重置出错?微软Win10平板Surface Pro 4重装系统教程详解 2015-12-11 15:27:30来源:IT之家作者:凌空责编:凌空 评论:65 Surface Pro 4系统重置出错该怎 ...

  9. Umbraco扩展开发

    国内Umbraco方面的资料很少,搜集到一些国外的优秀项目或插件.记录下来,便于日后使用: backoffice:https://github.com/TimGeyssens 后台扩展UI,可以在这里 ...

  10. js获取宽度设置thickbox百分比

    thickbox的宽高不好设为百分比,这样遇到不同的尺寸的电脑就会出现问题. 怎么做呢? 通过js来处理. <script type="text/javascript"> ...