首页 数据库 mysql教程 MySql事务无法回滚的原因_MySQL

MySql事务无法回滚的原因_MySQL

Jun 01, 2016 pm 01:01 PM
事务 原因

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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

投屏失败的原因是什么「新手必看:无线投屏连接不成功的方法」 投屏失败的原因是什么「新手必看:无线投屏连接不成功的方法」 Feb 07, 2024 pm 05:03 PM

无线投屏为什么会连接不成功呢?有些小伙伴反映在使用无线投屏的时候,会出现连接失败的情况,这是怎么回事呢?无线投屏连接失败怎么办?请确认您的电脑、电视和手机是否连接在同一个WiFi网络上。投屏软件要求设备在同一网络下才能正常使用,而快点投屏也不例外。因此,请您迅速检查一下您的网络设置。确定是否支持投屏功能很重要。智能电视和手机通常都支持DLNA或AirPlay功能。如果不支持投屏功能,就无法传屏。确认设备是否正确连接:在同一WiFi下的设备可能有多个,确保连接的是想要实现同屏的设备。4、确保网络的

什么原因导致wps office无法启动打印作业 什么原因导致wps office无法启动打印作业 Mar 20, 2024 am 09:52 AM

在局域网内连接打印机启动打印作业时会出现一些小状况,例如偶尔会出现“wpsoffice无法启动打印作业……”的问题,造成无法打印出文件等,耽误我们的工作和学习,造成不好的影响,下面就告诉大家,怎么解决wpsoffice无法启动打印作业的问题?当然你可以升级软件或是升级驱动等方案解决,但是这样花费你好长的时间,下面我就给大家较少一种分分钟可以搞定的方案。首先注意到wpsoffice无法启动打印作业,导致无法进行打印。要解决这个问题,需要逐一排查。另外,确认打印机已经开机并连接好。一般连接不正常会造

PHP 500错误全面指南:原因、诊断和修复 PHP 500错误全面指南:原因、诊断和修复 Mar 22, 2024 pm 12:45 PM

PHP500错误全面指南:原因、诊断和修复在PHP开发过程中,我们经常会遇到HTTP状态码为500的错误。这种错误通常被称为"500InternalServerError",它是指在服务器端处理请求时发生了一些未知的错误。在本文中,我们将探讨PHP500错误的常见原因、诊断方法以及修复方法,并提供具体的代码示例供参考。1.500错误的常见原因1.

苹果手机充电很慢是什么原因 苹果手机充电很慢是什么原因 Mar 08, 2024 pm 06:28 PM

使用苹果手机时,一些用户可能会遇到充电速度缓慢的问题。造成这种问题的原因有很多种,可能是由于充电设备功率过低,设备故障,或是手机的USB接口出现问题,甚至是电池老化等因素导致的。苹果手机充电很慢是什么原因答:充电设备问题,手机硬件问题,手机系统问题。1、用户在使用功率比较低的充电设备时,手机的充电速度就会很慢。2、使用第三方的劣质充电器或者是充电线也会导致充电速度很慢。3、推荐用户使用官方的原装充电器,或者是更换正规的有认证的大功率充电器。4、用户的手机硬件出现问题,比如说手机的usb接口接触不

揭秘win11蓝屏导致的根本原因 揭秘win11蓝屏导致的根本原因 Jan 04, 2024 pm 05:32 PM

相信不少朋友都遇到过系统蓝屏的问题,不过不知道win11蓝屏原因是什么,其实导致系统蓝屏的原因是有很多的,我们可以依次排查进行解决。win11蓝屏原因:一、内存不足1、运行太多软件或者游戏消耗内存太大的时候可能发生。2、尤其是现在win11存在内存溢出的bug,所以很有可能遇到。3、这时候可以尝试设置一下虚拟内存来解决,不过最好的方法还是升级内存条。二、CPU超频过热1、CPU的问题原因其实和内存差不多。2、一般会发生在使用后期、建模等软件,或者玩大型游戏时发生。3、CPU的消耗过大就会出现蓝屏

win11为什么会自动关机 win11为什么会自动关机 Jan 01, 2024 pm 11:39 PM

最近有朋友在更新系统后,遇到了win11自动关机的问题,很多情况下都会在玩游戏的时候发生,不知道是什么原因导致的。其实这可能是由于电脑配置不足,或者系统故障造成,下面一起来看看原因及解决方法吧。win11自动关机什么原因一、配置不足1、Windows11系统对于cpu和内存要求比Windows10要高一些。2、尤其是在运行大型游戏等任务时,极易出现自动关机的情况。3、用户可以试着还原到自动关机前的使用情况,右键点击开始菜单图标,打开“任务管理器”页面。4、我们在这个页面查看一下CPU、内存、磁盘

排查HTTP状态码550产生的原因和解决方案 排查HTTP状态码550产生的原因和解决方案 Feb 20, 2024 am 09:49 AM

探索HTTP状态码550的原因及解决方法引言:在网络通信中,HTTP状态码扮演着重要的角色,用于表示服务器处理请求的结果。其中,HTTP状态码550是一种相对较少见的状态码,通常与服务器拒绝执行请求相关。本文将探索HTTP状态码550的原因,并提供解决方法。一、HTTP状态码的基本概念在了解HTTP状态码550之前,我们先来简单了解一下HTTP状态码的基本概

Lock wait timeout exceeded; try restarting transaction - 如何解决MySQL报错:事务等待超时 Lock wait timeout exceeded; try restarting transaction - 如何解决MySQL报错:事务等待超时 Oct 05, 2023 am 08:46 AM

Lockwaittimeoutexceeded;tryrestartingtransaction-如何解决MySQL报错:事务等待超时在使用MySQL数据库时,有时可能会遇到一个常见的错误:Lockwaittimeoutexceeded;tryrestartingtransaction,该错误表示事务等待超时。这个错误通常发生在并

See all articles