代码配置没有问题,为什么不回滚事务(要理解Mysql数据库引擎)
在发展的前几天遇到的问题,在调试过程中发现配置service本次交易不工作层,更新后数据库抛出异常或成功,交易不会回滚。随后开始了各种检查,视图spring的事务是否配置正确,进入更新方法时是否开启了事务。经过检查之后发现一切都正常,那为什么事务不回滚呢?问题出在了一个非常难会去考虑的地方(数据库里创建的表不支持事务)。
Mysql数据库默认的创建表的引擎是:MYISAM,使用这样的引擎的表效率高。可是不支持事务,所以我们在建表时最好是依据需求手动去指定我们须要的引擎,以下是一个可以支持事务的建表sql,可以參考一下:
CREATE TABLE test (
id varchar(32) PRIMARY KEY,
name varchar(32),
create_time datetime,
create_user varchar(32) ,
address varchar(20) NOT NULL ,
remark varchar(100)
) ENGINE = InnoDB DEFAULT CHARSET=utf8
备注:ENGINE = InnoDB这个配置就是选择何种引擎,InnoDB这样的引擎支持事务。
以下是Mysql数据库常见的几种引擎的说明。能够了解一下,下次再创建表我们就能够选择合适引擎了。
ISAM:索引顺序訪问法(Index Sequential Access Mode)
ISAM是一个定义明白且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM运行读取操作的速度非常快,并且不占用大量的内存和存储资源。
ISAM的两个主要不足之处在于,它不支持事务处理。也不可以容错。假设你的硬盘崩溃了,那么数据文件就无法恢复了。假设你正在把ISAM用在关键任务应用程序里,那就必须常常备份你全部的实时数据,通过其复制特性,MYSQL可以支持这种备份应用程序。
MyISAM:Mysql的默认存储引擎
MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制。来优化多个并发的读写操作,其代价是你须要常常执行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM另一些实用的扩展,比如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具。MYISAM强调了高速读取操作,这可能就是为什么MySQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商仅仅同意使用MYISAM格式。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。
HEAP:
HEAP同意仅仅驻留在内存里的暂时表格。驻留在内存里让HEAP要比ISAM和MYISAM都快,可是它所管理的数据是不稳定的。并且假设在关机之前没有进行保存。那么全部的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。
HEAP表格在你须要使用SELECT表达式来选择和操控数据的时候很实用。
要记住,在用完表格之后就删除表格。
InnoDB:
InnoDB数据库引擎都是造就MySQL灵活性的技术的直接产品。这项技术就是MYSQL++ API。在使用MYSQL的时候,你所面对的每个挑战差点儿都源于ISAM和MyISAM数据库引擎不支持事务处理(transaction process)也不支持外来键。虽然要比ISAM和 MyISAM引擎慢非常多,可是InnoDB包含了对事务处理和外来键的支持。这两点都是前两个引擎所没有的。假设你的设计须要这些特性中的一者或者两者,那你就要被迫使用INNODB和BERKLEY引擎中的一个了,我们经常使用的是InnoDB。
InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。
InnoDB锁定在行级而且也在SELECT语句提供一个Oracle风格一致的非锁定读,这些特色添加了多用户部署和性能。没有在InnoDB中扩大锁定的须要。由于在InnoDB中行级锁定适合很小的空间。
InnoDB也支持FOREIGN KEY强制。在SQL查询中。你能够自由地将InnoDB类型的表与其他MySQL的表的类型混合起来,甚至在同一个查询中也能够混合。这是mysql官方的描写叙述。
据推测,许多人想了解更多去网上查一下...
版权声明:本文博客原创文章。博客,未经同意,不得转载。
代码配置没有问题,为什么不回滚事务(要理解Mysql数据库引擎)的更多相关文章
- 初步理解 MySQL数据库
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1. 索引是做什么的? 索引用于快速找出在某个列中有一特定值的行.不使用索引,MYSQL必须从第1条记录 ...
- 理解MySQL数据库事务
1. 什么是事务处理? 事务处理是一种机制,它是用来管理必须成批执行的mysql操作.来保证数据库不完整的操作结果. 2. 为什么要使用事务处理? 在使用mysql操作数据的过程中,如果只是简单的中小 ...
- 深入理解Mysql数据库主从延迟
1什么会增加主从延迟? 1 网络不好 2 从库硬件差 3 索引没做好,从库执行慢 4 从库锁等待,多见于myisam 5 主库写频繁,从库单线程执行慢 6 使用row复制,或mix使用行复制 2如何优 ...
- 理解MySQL数据库覆盖索引
话说有这么一个表: CREATE TABLE `user_group` ( `id` int(11) NOT NULL auto_increment, `uid` int(11) NOT NULL, ...
- 使用独立的log4net.config文件配置log4net,将日志记录到Mysql数据库【原创】
开发环境: VS2013, Asp.Net MVC 4.0, .Net Framework 4.0, Log4net 1.2.13.0, Mysql.Data.dll,6.8.3.0 设置步骤: 1. ...
- 理解MySQL数据库覆盖索引 (转)
http://www.cnblogs.com/zl0372/articles/mysql_32.html 话说有这么一个表: CREATE TABLE `user_group` ( `id` int( ...
- 理解MySQL数据库事务-隔离性
Transaction事务是指一个逻辑单元,执行一系列操作的SQL语句. 事务中一组的SQL语句,要么全部执行,要么全部回退.在Oracle数据库中有个名字,叫做transaction ID 在关系型 ...
- MySQL(二):快速理解MySQL数据库索引
索引 基本概念:索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现. 数据结构 Tree 指的是 Balance Tree,也就是平衡树.平衡树是一颗查找树,并 ...
- Django之mysql数据库配置
在settings.py中配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'my ...
随机推荐
- [IOS]本地化
我们在IOS开发应用中,会碰到做好的一个应用,如何趋向国际化,也就是说支持多种语言?下面我就来简单演示一下,用一个Demo来实现中文和英文的实现. 实现步骤: 1.本地化项目中xib的view 1.在 ...
- 内网port映射具体解释(花生壳)
关于怎样建立服务器的解答. 一.花生壳的作用 首先,我们先来了解一下花生壳的究竟有什么作用.由于ADSL每次拨号上网所获得的IP地址每次都是不同的,花生壳起到的作用就是方便用户訪问我们的server( ...
- HDU 3036 Escape 网格图多人逃生 网络流||二分匹配 建图技巧
题意: 每一个' . '有一个姑娘, E是出口,'.'是空地 , 'X' 是墙. 每秒钟每一个姑娘能够走一步(上下左右) 每秒钟每一个出口仅仅能出去一个人 给定n*m的地图, 时限T 问全部姑娘是否能 ...
- 关于产品的一些思考——腾讯之QQ音乐
--------------------2014.5.11-------------------- 原来一直使用小米手机自带的音乐播放器,除了搜歌下载不方便,其它的还好(省电是最大的长处),用过Jin ...
- Ceph更多Mon 更多mds
1.当前状态 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdWpfbW9zcXVpdG8=/font/5a6L5L2T/fontsize/400/fill ...
- Eclipse 打JAR包,插件FatJar 安装与使用
下载fatJar插件,解压缩后是一个.../plugins/(net...)把plugins下面的(net..)文件夹拷贝到eclipse的plugins下,重新启动Eclipse3.1,Window ...
- SessionA和pplication网上聊天室的网络范例
login.aspx码,如以下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile=" ...
- js多个物体运动的问题1
问题2 http://www.cnblogs.com/huaci/p/3854304.html 用js写一个物体的运动很简单.如果一个页面有多个物体在运动,它会不会出问题呢? ok,我们来看一个示例 ...
- DICOM医学图像处理:开源库mDCM与DCMTK的比較分析(一),JPEG无损压缩DCM图像
背景介绍: 近期项目需求,须要使用C#进行最新的UI和相关DICOM3.0医学图像模块的开发.在C++语言下,我使用的是应用最广泛的DCMTK开源库,在本专栏的起初阶段的大多数博文都是对DCMTK开源 ...
- Java模式(适配器型号)
今天阅读Java该适配器模式,这里有一个小的总结和下谈感受.对于将来使用. 首先.让我们有关适配器先说说. 适应是“来源”至“目标”适应.其中连接这两个的关系是适配器.它负责“源”过度到“目标”. 举 ...