MySql事务无法回滚的原因

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
+关注继续查看

使用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中的配置也是比較关键的。良好的配置,可以有效的加速你的应用。






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5197849.html,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
SQL 关系型数据库 MySQL
深入理解MySQL索引及事务
深入理解MySQL索引及事务
|
1天前
|
SQL 安全 关系型数据库
MySQL中事务基础入门详解
MySQL中事务基础入门详解
37 1
MySQL中事务基础入门详解
|
1天前
|
Oracle 关系型数据库 MySQL
MySQL事务中幻读实践
MySQL事务中幻读实践
30 0
|
15天前
|
人工智能 关系型数据库 MySQL
MySQL 事务原理:锁机制
MySQL 事务原理:锁机制
26 0
|
15天前
|
SQL 关系型数据库 MySQL
MySQL 事务原理:事务概述、隔离级别、MVCC-2
MySQL 事务原理:事务概述、隔离级别、MVCC
22 0
|
15天前
|
SQL 存储 关系型数据库
MySQL 事务原理:事务概述、隔离级别、MVCC-1
MySQL 事务原理:事务概述、隔离级别、MVCC
20 0
|
1月前
|
SQL 安全 关系型数据库
【Hello mysql】 mysql的事务(下)
【Hello mysql】 mysql的事务(下)
20 0
|
1月前
|
SQL 关系型数据库 MySQL
【Hello mysql】 mysql的事务(上)
【Hello mysql】 mysql的事务
18 0
|
1月前
|
SQL 关系型数据库 MySQL
MySQL中的索引事务(2)事务----》数据库运行的原理知识+面试题~
MySQL中的索引事务(2)事务----》数据库运行的原理知识+面试题~
11 0
|
1月前
|
存储 关系型数据库 MySQL
MySQL中的索引事务(1)索引----》数据库运行的原理知识+面试题~
MySQL中的索引事务(1)索引----》数据库运行的原理知识+面试题~
10 0
推荐文章
更多