前几天开发中遇到了一个问题,在进行调试的过程中发现配置在service层的事务不起作用,抛出异常后数据库的更新还是成功了,事务并没有回滚,然后就开始各种检查,查看spring的事务是否配置正确,进入更新方法时是否开启了事务,经过检查之后发现一切都正常,

前几天开发中遇到了一个问题,在进行调试的过程中发现配置在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官方的描述。

如果还想了解更多那就多去网上查查吧...

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

mysql数据库引擎事务_代码配置都没问题,为什么事务不回滚(了解Mysql数据库引擎)...相关推荐

  1. java spring mysql配置_java相关:mysql+spring+mybatis实现数据库读写分离的代码配置

    java相关:mysql+spring+mybatis实现数据库读写分离的代码配置 发布于 2020-4-4| 复制链接 分享一篇关于关于mysql+spring+mybatis实现数据库读写分离的代 ...

  2. c# mysql代码中写事务_代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性...

    [c#]代码库代码中使用事务前提:务必保证一个功能(或用例)在同一个打开的数据连接上,放到同一个事务里面操作. 首先是在D层添加一个类为了保存当前操作的这一个连接放到一个事务中执行,并事务执行打开同一 ...

  3. lua mysql 事务_为什么在 Redis 实现 Lua 脚本事务?-阿里云开发者社区

    在刚过去的几个月中,我一直在构思并尝试在 redis 中实现 lua 脚本的事务功能.没有多少人理解我的想法,所以我将通过一些历史为大家做下解释. MySQL 与 Postgres 在 1998-20 ...

  4. java 对线程进行事务控制_Java 多线程事务回滚 ——多线程插入数据库时事务控制...

    背景 日常项目中,经常会出现一个场景,同时批量插入数据库数据,由于逻辑复杂或者其它原因,我们无法使用sql进行批量插入.串行效率低,耗时长,为了提高效率,这个时候我们首先想到多线程并发插入,但是如何控 ...

  5. 5.6.50 mysql 用什么驱动_日均5亿查询量的京东订单中心,为什么舍弃MySQL用ES?

    京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调用量都非常大,造成了订单数据读多写少的情况. 我们把订单数据存储在MySQL中,但显然只通过DB来支撑大量的 ...

  6. php事务和回滚,php – Mysql事务:提交和回滚

    我将我的PhpMyAdmin数据库引擎从MyISAM更新到INNODB以允许回滚. 这是我的SQL查询: START TRANSACTION; UPDATE jkm_content SET state ...

  7. sql server 事务_如何使用显式SQL Server事务回滚

    sql server 事务 In this article, we will explore the process of rollback an explicit SQL Server transa ...

  8. mysql c 助手类_节日福利,属于你的Offer助手:阿里独家MySQL进阶宝典

    提到MySQL,大家都知道是它最流行的关系型数据库管理系统(RDBMS)之一,而且MySQL近两年一直稳居第二,随时有可能超过Oracle计晋升为第一名,因为MySQL的性能一直在被优化,同时安全机制 ...

  9. oracle表结构修改回滚,87.Oracle数据库SQL开发之 修改表内存——数据库事务的提交和回滚...

    87.Oracle数据库SQL开发之 修改表内存--数据库事务的提交和回滚 数据库事务(transaction)就是一组SQL语句,这组SQL语句时一个逻辑工作单元. 要永久性的记录事务中SQL语句的 ...

  10. mysql导致根目录爆满_因为根目录磁盘满了,我移动数据和软件造成mysql启动不了,查原因mysql.sock不在了...

    今天刚接手新项目的服务器,不知道以前谁搭建的因为要备份数据库,但是发现空间不足/根目录满的,然后我移动软件和文件造成mysql启动不了root@localhost~]#/data 今天刚接手新项目的服 ...

最新文章

  1. 【原创】Github团队协作之Pull请求
  2. 在linux中如何高效的使用帮助
  3. L0,L1,L2范数
  4. 配置Vm box虚拟机
  5. 注入双括号报错注入_SQL手动注入:sqlilabs(less110)
  6. golang实现自定义驱动的Cache
  7. LeetCode 1717. 删除子字符串的最大得分
  8. 1.Hadoop的组成 HDFS YARN
  9. 涨价警告!2020年苹果新iPhone Pro系列售价或将万元起
  10. ORACLE数据库多表关联查询效率问题解决方案
  11. 进阶 2 日期时间类
  12. jdk和tomcat环境变量批处理(.bat)
  13. 数据结构(C语言版 第2版严蔚敏版)完整课后习题答案汇总
  14. SD-WAN是虚火,还是真火?
  15. 综述文章:支持自闭症谱系障碍青少年灵活认知和行为的大脑机制
  16. 计算机组成二进制除法,计算机组成原理:3.4.1 定点原码 除法器
  17. Docker常用的命令
  18. java web—水果店管理系统
  19. 线程同步小例子:12306订票
  20. 华为H3C交换机+Radius+mysql Radius认证认证方案,嵌入式客户端代码,配置(上:认证方案)

热门文章

  1. 【TWVRP】基于matlab遗传算法求解多车场带时间窗的车辆路径规划问题【含Matlab源码 1035期】
  2. 【数字信号调制】基于matlab GUI数字信号调制系统【含Matlab源码 1030期】
  3. python id函数 引用本身地址_Python 之引用
  4. ai 实用新型专利_专利制度协调AI创造的创新
  5. 端到端车道线检测_如何使用Yolov5创建端到端对象检测器?
  6. action评测 osmo_Osmo Action与GoPro 7的七大对决,评测谁是运动相机王者?
  7. 谷歌离开游览器不触发_谷歌推广应该怎么做,一篇文章带你了解谷歌推广
  8. 获取两个数组的差 php,php-获取2个数组之间的差
  9. hook代码 svn_Svn结合hook实现自动更新及多Project管理更新
  10. 微信红包惊人秘密:谁最容易抢到大红包?