MySql数据库事务正常提交,回滚失败
2017-07-24 20:24
218 查看
问题:在初次练习Mysql数据库事务时,事务正常提交,但是在遇到异常应当回滚时,回滚失败。
代码如下:
原因:Mysql数据库引擎使用的是默认的MyISAM,mysql支持四种引擎,如下图
从图中可以看出mysql默认的引擎并不支持事务。
解决方法:修改表引擎
修改某个表的存储引擎为innodb:alter table table_name engine=innodb;
注意:修改或者操作某个表之前首先要进入某个表所在的数据库中,使用use db_name go;,之后再进行增删改查操作。
其他查看mysql引擎相关信息的sql语句:
代码如下:
//2.更新操作。 public void update(Connection conn, String sql, Object ...objects){ PreparedStatement preparedstatement = null; try { preparedstatement = conn.prepareStatement(sql); for(int i = 0; i < objects.length; i++){ preparedstatement.setObject(i + 1, objects[i]); } preparedstatement.executeUpdate(); } catch (Exception e) { e.printStackTrace(); }finally{ TestTools.release(preparedstatement,null); } } /** * 2_1.测试以上方法 */ @Test public void test(){ Connection conn = null; try { conn = TestTools.getConnection(); //开始事务,在开始之前要关闭数据库默认自动提交 conn.setAutoCommit(false); String sql = "update users set balance = balance - 500 where id = 1"; update(conn,sql); //出现异常时,事务回滚到之前的状态 int number = 10 / 0; System.out.println(number); sql = "update users set balance = balance + 500 where id = 2"; update(conn,sql); //结束,就提交事务 conn.commit(); } catch (Exception e) { e.printStackTrace(); //发生异常,事务回滚 try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } }finally{ //设置事务提交方式为自动提交: try { conn.setAutoCommit(true); } catch (SQLException e) { e.printStackTrace(); } //关闭连接 TestTools.release(null, conn); } }
结果应当是遇到异常事务回滚,但结果是id为1balance的值被减去500,事务遇到异常没有回滚。
原因:Mysql数据库引擎使用的是默认的MyISAM,mysql支持四种引擎,如下图
从图中可以看出mysql默认的引擎并不支持事务。
解决方法:修改表引擎
修改某个表的存储引擎为innodb:alter table table_name engine=innodb;
注意:修改或者操作某个表之前首先要进入某个表所在的数据库中,使用use db_name go;,之后再进行增删改查操作。
其他查看mysql引擎相关信息的sql语句:
1.查看系统支持的存储引擎:show engines; 2.查看表使用的存储引擎 两种方法: a、show table status from db_name where name='table_name'; b、show create table table_name; 3.mysql当前默认的存储引擎:show variables like '%storage_engine%'; 4.某个表用了什么引擎:show create table 表名;
相关文章推荐
- c语言mysql数据库事务开始、提交、回滚范例
- c++ mysql事务提交及回滚
- Spring注解事务提交回滚
- Mysql数据库事务二阶段提交正确性验证的想法
- 关于SAP的事务提交和回滚(LUW)
- ssm手动提交事务或回滚事务
- Pmon和Smon回滚被Kill会话未提交事务引发问题的探讨(旧文初发)
- 事务提交及回滚的具体写法
- mysql事务的提交和回滚
- java 事务回滚失败
- 关于SAP的事务提交和回滚(LUW)
- TransactionScope只要一个操作失败,它会自动回滚,Complete表示事务完成
- 自动提交&事务&回滚
- 代码配置没有问题,为什么不回滚事务(要理解Mysql数据库引擎)
- 用spring测试框架测试Mysql数据库时事务无法回滚
- 项目开发-iBatis事务源码之事务提交和回滚
- spring注解事务及事务回滚失败的原因
- Java中事务的提交与回滚
- ibatis 对事务和批量提交的处理,以及回滚的处理