简介事物与隔离级别

事务的特性:


原子性(Atomicity)

事务中的所有操作要么全部执行,要么都不执行。

一致性(Consistency)

事务执行前后数据库都处于一致的状态。

隔离性(Isolation)

多个事务执行都感觉不到其它事务在执行。

持久性(Durability)

一个事务一旦被提交,所有的修改将永久保存,即使系统故障也不丢失。

隔离级别:



读不提交——READUNCOMMITTED

脏读,可能读到脏数据。如下例,T1读取数据100,将其更新为200,此后T2读取数据200,并将其更新为600 。T1 rollback或者commit之后,T2读取和改写的数据均无效了,读到了脏数据。

简介事物与隔离级别_第1张图片


读 提 交——READCOMMITTED

可以避免脏读,但是会造成不可重复读,每次读到的数据可能不同。如下所示:T1读取100时先加行锁,然后将其更新为200,于此同时T2想读取改行数据,但是T1没有释放锁,T2只能等待。T1 rollback活commit后释放掉行锁,T2获得锁,可以读取数据。但是T2所在会话不可重复读,可能这次读到的是200,然后又被T1修改为300,T2再次读,读到的数据为300,如何避免不可重复读就要用到下一个隔离级别。

简介事物与隔离级别_第2张图片


可重复读——REPEATABLEREAD

可以避免不可重复读,但是还存在幻象读,第二次读到的记录会多。如下所示:T1对表加行锁,第一次读取数据100,此后T2对数据表上锁,添加数据300,然后T2提交请求。此后T1对表加行锁,第二次读到了数据100和300,这就是幻象读。

简介事物与隔离级别_第3张图片


可串行化——SERIALIZABLE

性能很低,但是能避免上面提到的所有问题。

简介事物与隔离级别_第4张图片




下面是对事物隔离级别的一个总结图表,可以看出各个隔离级别以及对应的问题:

简介事物与隔离级别_第5张图片

你可能感兴趣的:(简介事物与隔离级别)