`
javahacker2
  • 浏览: 41555 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于MYSQL事务不回滚问题

 
阅读更多

关于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事务无法回滚的原因有哪些

    使用MySQL时,如果发现事务无法回滚,但Hibernate、Spring、JDBC等配置又没有明显问题,到底是什么原因,下面与大家分享下

    Spring+Mybatis整合事务回滚

    花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表...

    MySQL事务部分回滚-回滚到指定保存点.zip_MYSQL_begunfqh_detailrj2

    mysql数据回滚,回滚数据到指定保存点。用于线上恢复问题

    解析php mysql 事务处理回滚操作(附实例)

    在这个时候,我们可以用Mysql事务回滚来进行处理,那代码怎么写呢? 那下面我就来说一说这个mysql事务回滚应该怎么处理。 首先MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的! 那如果...

    php的事务回滚

    运行环境,只需要在数据库增加表和代码里对于的几个字段,修改一下代码对应的数据库名和账号密码

    mySQL事务处理

    关于mysql的事务处理 public static void StartTransaction(Connection con, String[] sqls) throws Exception { if (sqls == null) { return; } Statement sm = null; try { // 事务开始 System....

    mongoDB 4.0事务回滚的辛酸历程探究

    主要给大家介绍了关于mongoDB 4.0事务回滚的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    mysql实现事务的提交和回滚实例

    我这里要说明的mysql事务处理多个SQL语句的回滚情况。比如说在一个存储过程中启动一个事务,这个事务同时往三个表中插入数据,每插完一张表需要判断其是否操作成功,如果不成功则需要回滚,最后一张表判断其插入成功...

    PHP事务处理实例 mysql事务处理的意义

    mysql事务处理的意义 事务处理机制在程序开发过程中有着非常重要的作用,它可以使整个系统更加安全,例如在银行处理转账业务时,如果A账户中的金额刚被发出,而B账户还没来得及接收就发生停电,这会给银行和个人带来...

    MYSQL事务回滚的2个问题分析

    因为innodb的auto_increament的计数器记录的当前值是保存在存内存中的,并不是存在于磁盘上,当mysql server处于运行的时候,这个计数值只会随着insert改增长,不会随着delete而减少。而当mysql server启动时,当...

    ThinkPHP实现事务回滚示例代码

    ThinkPHP的事务回滚示例如下: $m=D('YourModel');//或者是M(); $m2=D('YouModel2'); $m->startTrans();//在第一个模型里启用就可以了,或者第二个也行 $result=$m->where('删除条件')->delete(); $result2=m2->...

    mysql实现事务的提交与回滚的实例详解

    在本篇文章中我们给大家分享一篇关于mysql实现事务的提交与回滚的实例内容,有需要的朋友们可以参考学习下。

    MySql存储过程与事务处理教学PPT

    (程序员不是数据库管理员他可能不了解很多数据库的机制比如事务,错误回滚等.银行转帐问题可以解释.) 减轻客户端应用程序的负担 (让更多的操作由数据库服务器执行) MySql存储过程与事务处理教学PPT

    php事务回滚简单实现方法示例

    本文实例讲述了php事务回滚简单实现方法。分享给大家供大家参考,具体如下: $servername="localhost"; $username="root"; $password="admin"; $dbname="test"; try{ $conn=new PDO("mysql:host=$servername;...

Global site tag (gtag.js) - Google Analytics