try {
connection.setAutoCommit(false);
bankDao.transferMoney(+2000, 1, connection); //帐号1 增加2000
if(true){
throw new RuntimeException(); //模拟报错
}
bankDao.transferMoney(-2000, 2, connection);//帐号2 减少2000
connection.commit();
} catch (Exception e) {
try {
connection.rollback();
System.out.println("回滚事务");
} catch (Exception e1) {
e1.printStackTrace();
}
}
我发现就算我没有使用connection.rollback()
, 由于事务还没有提交, 数据库里面的数据还是不会发生改变, 就是用或者是不用的效果也是一样, 那我为什么还要使用connection.rollback()
呢? 谢谢
你的本次两个SQL语句包含在一个事物中。
在你的这个事物中包含了更新操作,而mysql的 innodb是一个行级锁,按照mysql的默认事物级别:
Repeated Read
。如果你不及时提交或者回滚,那么造成的影响可能有如下两种:
所以一个事物要么尽快提交,要么尽快回滚。
顺便你可以去看下oracle关于事物的一个官方文档:
https://docs.oracle.com/javas...