并发事务问题 隔离级别

为了实现一致性的事务,在并发情况下的隔离性的不同会出现不同的结果

所以首先分析一下因为隔离性问题,而产生的不同的一致性问题

丢失修改

并发事务问题 隔离级别
事务T1和T2都对数据库进行修改操作,T1修改的数据被T2给替换了,造成丢失修改;

脏读数据

并发事务问题 隔离级别
T1修改数据库数据,T2是读数据。如果T1修改数据从50到100,但是修改失败,此时T2读取修改后的100数据就是错误的,读的是脏数据;

不可重复读数据

并发事务问题 隔离级别
T1事务修改数据库数据,T2事务在修改数据之前读取。T2读取数据为50,然后T1修改数据为100,T2再次读取数据库数据为100,这时T2两次读取数据不一致,那么这就是不可重复读数据。

幻影读

并发事务问题 隔离级别
T1 读取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。

隔离级别

根据以上因为隔离性的问题,造成的并发情况下数据的不一致性问题,所以分析一下到底有什么样的隔离性级别
并发事务问题 隔离级别

未提交读(READ UNCOMMITTED)

事务中的修改,即使没有提交,对其它事务也是可见的

可能会出现的并发不一致性问题:脏读,不可重复度,幻影读;

提交读(READ COMMITTED)

一个事务只能读取已经提交的事务所做的修改。换句话说,一个事务所做的修改在提交之前对其它事务是不可见的。

可重复读(REPEATABLE READ)

保证在同一个事务中多次读取同样数据的结果是一样的。

可串行化(SERIALIZABLE)

强制事务串行执行。

需要加锁实现,而其它隔离级别通常不需要