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) {
if(connection!=null){
try {
connection.rollback();
System.out.println("回滚事务");
} catch (Exception e1) {
e1.printStackTrace();
}
}
}finally{
if(connection!=null){
connection.close();
}
}
记录下网上其他人的说法:
本次两个SQL语句包含在一个事物中。
在你的这个事物中包含了更新操作,而mysql的 innodb是一个行级锁,按照mysql的默认事物级别:Repeated Read
。
如果你不及时提交或者回滚,那么造成的影响可能有如下两种:
- 当另一个事物需要对这一行进行更新的时候是