1.数据库事物: 事物的概念 a给b打100块钱的例子
2.jdbc事物: 通过下面代码实现
private Connection conn = null;
private PreparedStatement ps = null;
try {
conn.setAutoCommit(false); //将自动提交设置为false
ps.executeUpdate("修改1 SQL"); //执行修改1操作
ps.executeQuery("修改2 SQL"); //执行修改2操作
conn.commit(); //当两个操作成功后手动提交
} catch (Exception e) {
conn.rollback(); //一旦其中一个操作出错都将回滚,使两个操作都不成功
e.printStackTrace();
}
3.spring事物: 通过xml配置和注解来配置和使用事物, 事物的实现还是jdbc事物, 不过被spring包装了, 我们看不见
4.脏幻不可重复读是在已经有了事物之后会发生的一些事情, 数据隔离级别方面的概念
脏读:
强调的是第二个事务读到的不够新。
幻读 :
重点在于新增或者删除, 同样的条件 , 第 1 次和第 2 次读出来的记录数不一样
不可重复读 :
重点是修改, 同一事务,两次读取到的数据不一样。
Spring声明性事务 隔离级别
l DEFAULT 使用数据库设置的隔离级别 ( 默认 ) ,由 DBA 默认的设置来决定隔离级别 . 而MySQL的默认事务隔离级别是:Repeatable Read
l READ_UNCOMMITTED 会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 )
l READ_COMMITTED 会出现不可重复读、幻读问题(锁定正在读取的行)
l REPEATABLE_READ 会出幻读(锁定所读取的所有行)
l SERIALIZABLE 保证所有的情况不会发生(锁表)