由数据库的隔离级别到spring对数据库的事物控制
一、关于事务的隔离级别: sql定义四种隔离级别(由低到高) 1 Read Uncommitted 读取未提交内容 2 Read Committed 读取提交内容 3 Repeatable Read 可重读 4 Serializable 可串行化 二、不同隔离级别所面对的问题 四种隔离级别通过不同的锁类型实现,在读取同一个数据,就容易发生问题。 问题有三种 :脏读,不可重复读,幻读。 不同的隔离级别可能产生的问题也不同 隔离级别 脏读 不可重复读 幻读 Read Uncommitted √ √ √ Read Committed × √ √ Repeatable Read × × √ Serializable × × × 三、产生问题的原因 脏读:首先有行记录a,事务A将记录a修改为a1,但尚未提交(可能会提交失败)。事务B读取到了未提交的数据a1。 原因:因为一旦事务A回滚,那么事务B读取到的a1就是无效数据。 不可重复读:同一事务对一条记录读取2次,得到的结果不一致。 原因:两次读取的过程中,事务B对这条记录进行了修改。 幻读:事务A 读取一条where子句的结果集,2次读取得到的记录多出n条。 原因:两次读取过程中,事务B对数据库插入新行,并且满足事物A的where 条件。 oracle数据库 只支持Read Committed 和 Serializable,默认第二种;