四种事务隔离级别与三种异常

四种事务隔离级别:

未提交读:一个事务可以读任何已提交或未提交的数据。这可以通过“读操作不需
要请求任何锁”来实现。

已提交读:一个事务可以读任何已提交的数据。对于同一个对象的重复读可能导致
读到不同版本的数据。实现方式是,读数据前必须首先获得一个读操作锁,一旦数
据读取之后该锁被立即释放。

可重复读:一个事务只能读取一个已提交数据的一个版本;一旦该事务读取了一个
对象,那么,它将只能读取该对象的同一个版本。实现方式是,事务在请求读数据
之前必须获得一个锁,并且保持该锁直到事务结束。

可串行化:保证完全的可串行化。

三种异常:

1、脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

2、不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。

3、幻读。乍一看可重复读似乎保证了完全的可串行化,但是,其实并不是这样。在早期的 R 系统中发生了一个“幽灵问题”。在幽灵问题中,一个事务使用同样的谓词多次访问了同一个关系,但是,最近的访问却得到了最初访问时没有发现的新的“幽灵元组”。原因在于,元组级的两段锁并不能阻止往表中插入元组。表级别的两段锁可以防止幽灵问题,但是,当事务通过索引访问表中的几个元组时,表级别的两段锁是被限制的。

你可能感兴趣的:(四种事务隔离级别与三种异常)