MySql事务无法回滚的原因

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

使用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,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 监控 关系型数据库
MySQL怎么全局把一张表的数据回滚
MySQL怎么全局把一张表的数据回滚
302 2
|
10天前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
MySQL事务日志-Undo Log工作原理分析
|
19天前
|
SQL 安全 关系型数据库
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
事务是MySQL中一组不可分割的操作集合,确保所有操作要么全部成功,要么全部失败。本文利用SQL演示并总结了事务操作、事务四大特性、并发事务问题、事务隔离级别。
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
|
25天前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(04)事务隔离级别、AICD、CAP、BASE原则一直搞不懂? | 看这篇就够了
本文详细介绍了数据库事务的四大特性(AICD原则),包括原子性、隔离性、一致性和持久性,并深入探讨了事务并发问题与隔离级别。同时,文章还讲解了分布式系统中的CAP理论及其不可能三角关系,以及BASE原则在分布式系统设计中的应用。通过具体案例和图解,帮助读者理解事务处理的核心概念和最佳实践,为应对相关技术面试提供了全面的知识准备。
|
3月前
|
存储 SQL 关系型数据库
MySQL的事务隔离级别
【10月更文挑战第17天】MySQL的事务隔离级别
140 43
|
2月前
|
关系型数据库 MySQL
mysql事务特性
原子性:一个事务内的操作统一成功或失败 一致性:事务前后的数据总量不变 隔离性:事务与事务之间相互不影响 持久性:事务一旦提交发生的改变不可逆
|
3月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1766 14
MySQL事务日志-Redo Log工作原理分析
|
2月前
|
关系型数据库 MySQL 数据库
MySQL事务隔离级别及默认隔离级别的设置
在数据库系统中,事务隔离级别是一个关键的概念,它决定了事务在并发执行时如何相互隔离。MySQL提供了四种事务隔离级别,每种级别都解决了不同的并发问题。本文将详细介绍这些隔离级别以及MySQL的默认隔离级别。
|
2月前
|
SQL 关系型数据库 MySQL
mysql数据误删后的数据回滚
【11月更文挑战第1天】本文介绍了四种恢复误删数据的方法:1. 使用事务回滚,通过 `pymysql` 库在 Python 中实现;2. 使用备份恢复,通过 `mysqldump` 命令备份和恢复数据;3. 使用二进制日志恢复,通过 `mysqlbinlog` 工具恢复特定位置的事件;4. 使用延迟复制从副本恢复,通过停止和重启从库复制来恢复数据。每种方法都有详细的步骤和示例代码。
525 2
|
4月前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
838 18