数据库事物补充
并发引起问题:
脏读:并发情况下,T1对数据进行修改后 未进行事物提交 。此时T2读取到T1未提交且已修改过得数据 称之为脏读。(更新)
不可重复读:对于两个事物T1和T2,假设T1读取一个字段时数字200,此时T2对该字段进行更改 更改后未100 。T1此时读取信息与第一次不同 我们称该现象未不可重复读。
幻读:对于事物T1和T2,T1读取表中数据时,此时T2向表中插入几条数据。T1再次读取时发现表数据增加 此种现象为幻读。(插入,删除)
事物隔离级别:
实例一:
T1和T2事物隔离级别都为:read uncommited
操作:T1第一次读取数据,并对其中一条进行修改 ,T1事物未提交。此时T2读取数据时,则数据为T1修改过未提交的数据。
T1进行数据回滚,T2再读取数据。
现象:T2两次读取数据不一致。
体现的问题:脏读,不可重复读,幻读
案例二:
T1,T2事物隔离级别都设置为:read commited
操作:T1开启事务,并对其中数据进行修改。T2此时读取到T1修改前数据,当T2读取数据后。T1对修改过的数据进行事物提交。T2再读取表中数据为T1修改后数据
现象:T2两次读取数据不一致
体现问题: 可以避免脏读,但是存在幻读和不可重复读。
案例三
T1,T2事物隔离级别:repeatable read(默认隔离级别)
操作:同案例二
现象:未出现数据读取不一致问题 解决:脏读和不可重复读 。
案例四:
T1,T2事物隔离级别:Serializable(存在性能问题)
操作:同上
现象:完美避免 脏读,不可重复读,幻读