为了实现一致性的事务,在并***况下的隔离性的不同会出现不同的结果
所以首先分析一下因为隔离性问题,而产生的不同的一致性问题
丢失修改
事务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)
强制事务串行执行。
需要加锁实现,而其它隔离级别通常不需要