关于MYSQL事务不回滚的问题:
实现功能时,发现MYSQL事务不回滚,查看表的引擎是InnoDB,但有可能数据库的不是,查看修改如下:
查看MySQL数据库使用的存储引擎:mysql>show variables like '%storage_engine%';结果:+----------------+--------+ |Variable_name |Value| +----------------+--------+ |storage_engine|InnoDB| +----------------+--------+
查看MySQL提供什么存储引擎:mysql>show engines;结果:+------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +------------+---------+----------------------------------------------------------------+--------------+------+------------+ | MyISAM | YES | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | +------------+---------+----------------------------------------------------------------+--------------+------+------------+ 8 rows in set
从结果上看,当前数据库的默认存储引擎是InnoDB(注意观察Support这一列的值),不过有的数据库却不是,它们默认的是MyISAM。非但如此,在Support一栏中还显示NO,就是说连InnoDB都不支持。这就是为什么不回滚的原因:InnoDB支持事务,而MyISAM不支持!其实MyISAM是MySQL默认的存储引擎,在安装MySQL时如果没有指定存储引擎,那么MySQL会默认使用MyISAM,因为它不支持事务,也许效率会比InnoDB高一些。
如果使用的是MyISAM,那么需要将其改为InnoDB,具体方法如下:1、打开“MySQL_HOME/my.ini”,找到[mysqld],在它的下面有一句话是“skip-innodb”,将其注释掉,即改为:#skip-innodb。2、在[mysqld]下加上一句“default_table_type=INNODB”(如果写成default-storage-engine=INNODB也可以,两者之间的区别我还没有研究过)3、重启MySQL服务(注意:是重启服务,不是光退出数据库就完事了!)4、再次执行mysql> show engines;可以看见默认存储引擎已经变成InnoDB了。5、原来已经存在的表,如果想使用事务,要修改它的存储引擎,在默认是InnoDB的情况下删除重建。当不想删除的时候,执行alter table 表名 ENGINE = InnoDB;之后执行show table status from 数据库名 where name='表名';可以查看表状态,看存储引擎是否被修改了。
在使用了InnoDB引擎之后,再次运行代码,回滚成功!
相关推荐
MySQL事务无法回滚的情况可能由多种因素引起,尤其是在配置如Hibernate、Spring或JDBC等框架时,如果一切看似正常,但事务处理仍然失效,我们应当深入检查数据库本身的特性和设置。首要的问题通常与所选用的表类型...
在“MySQL事务部分回滚-回滚到指定保存点.pdf”文件中,你可能会找到更多关于如何在实际操作中应用这些概念的详细步骤和示例,包括如何创建和管理保存点,以及如何在出现问题时有效地回滚到特定保存点。建议仔细阅读...
花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表...
- 事务的所有操作要么全部完成,要么全部不执行,不允许部分执行的情况出现。 - **一致性(Consistency)** - 事务的执行不会破坏数据库的一致性约束条件。事务开始前后的状态都应满足一致性的要求。 - **隔离...
下面我们将深入探讨两个关于MySQL事务回滚的问题。 ### 问题1:为什么AUTO_INCREMENT没有回滚? MySQL的InnoDB存储引擎在处理`AUTO_INCREMENT`列时,其递增计数器是存储在内存中的,而不是磁盘上的数据文件。这...
在本文中,我们将深入探讨如何在PHP中处理MySQL的事务回滚操作。 首先,要理解的是,不是所有的MySQL存储引擎都支持事务。默认的MyISAM引擎就不支持事务,而InnoDB和BDB引擎则提供了事务处理功能。如果你的数据表...
在探讨数据库事务回滚机制实例之前,我们先来理解一下什么是数据库事务以及为什么需要事务管理。数据库事务(Transaction)是指一组逻辑操作单元,这组操作要么全部成功,要么全部失败,是一个不可分割的工作单位。...
- 文章提到的其他主题包括找出未提交事务的信息、MySQL的读提交事务隔离级别以及使用Python连接MySQL并提交事务,这些都是进一步学习MySQL事务处理的好资源。 总之,MySQL的事务处理是数据库操作中不可或缺的部分...
JAVA设置手动提交事务、回滚事务、提交事务的操作详解 本文主要介绍了JAVA设置手动提交事务、回滚事务、提交事务的操作,涉及到事务的自动提交、手动提交、回滚和提交等操作。以下是对这些操作的详细解释和示例代码...
事务回滚是事务处理中的关键部分,确保在出现错误或异常时,数据库能够恢复到事务开始之前的状态。 在升级到MongoDB 4.0之后,首先需要注意的是确保环境的兼容性。使用Homebrew升级MongoDB到4.0.0版本,同时更新`...
运行环境,只需要在数据库增加表和代码里对于的几个字段,修改一下代码对应的数据库名和账号密码
关于mysql的事务处理 public static void StartTransaction(Connection con, String[] sqls) throws Exception { if (sqls == null) { return; } Statement sm = null; try { // 事务开始 System....
如果在执行过程中发生错误,事务可以通过回滚(ROLLBACK)撤销所有已执行的操作,确保数据库状态不受影响。 一致性(Consistency):事务执行前后,数据库都必须处于一致性状态。例如,如果一个交易涉及从库存中...
以下将详细介绍如何在ThinkPHP中实现事务回滚,并探讨相关的数据库事务概念。 首先,事务是一个逻辑操作单元,它包含一组数据库操作,这些操作要么全部执行,要么全部不执行。这样可以确保即使在系统故障或部分失败...
我这里要说明的mysql事务处理多个SQL语句的回滚情况。比如说在一个存储过程中启动一个事务,这个事务同时往三个表中插入数据,每插完一张表需要判断其是否操作成功,如果不成功则需要回滚,最后一张表判断其插入成功...