数据库四种隔离级别

来源:这里教程网 时间:2026-03-03 19:45:15 作者:

四种隔离级别:

 

 1. 读未提交( Read Uncommitted

  在读未提交的隔离级别下,一个事务可以看到其他事务未提交的更改。这意味着一个事务在执行中可能会看到还未完成的事务的更改,可能导致不一致的数据状态。因此,不建议使用这种隔离级别。

在这个级别,一个事务可以读取另一个事务尚未提交的修改。这可能导致脏读、不可重复读和幻读。

优点是并发度高,因为几乎没有锁定。

缺点是数据一致性极差,可能会读到未被确认的数据。

 

 

 2. 读已提交( Read Committed

  在读提交的隔离级别下,一个事务只能看到已经提交的其他事务的更改,避免了读操作看到未提交事务的数据。但是,在该隔离级别下,由于其他事务的更改还未被提交,因此可能导致同一事务多次查询得到的结果不一致。

理解: A 事务可以看到已提交的事务的更改,但是如果在 A 事务的执行时间内, t2 时刻 B 事务修改了数据并提交,会查到一个 b 值, t3 时刻 C 事务修改了数据并提交,会查到 c 值,这就是同一事务会查到不一致结果的原因。

一个事务只能看到其他事务已经提交的修改,不能看到未提交的变更。这避免了脏读,但仍然可能发生不可重复读和幻读。

优点是提高了数据的一致性,但并发度相对较低,因为每次读取都需要检查事务的提交状态。

缺点是在某些场景下,同一个事务可能会读到不一致的数据。

 

 

 3. 可重复读( Repeatable Read

  在可重复读的隔离级别下,一个事务在执行过程中不能看到其他事务更改的数据,即其他事务的更改只是在事务提交后才能被读到,这种隔离级别下读数据的一致性比较高,但是会增加锁开销。

理解: A 事务在这种隔离级别下,看不到其他事务做出的更改,只有 A 事务完成后,才能看到其他事物做出的修改。

事务在整个执行过程中,看到的数据是一致的,即在事务开始时的快照,不会看到其他事务在这期间对数据的修改,除非这些事务已经提交。这避免了脏读和不可重复读,但可能仍会出现幻读。

优点是提供了较高的数据一致性,适合于需要一致性视图的场景。

缺点是在某些数据库系统中,为了实现可重复读,可能会使用行级锁定,导致并发度下降。

 

 

 4. 序列化( Serializable

  在序列化的隔离级别下,所有事务串行执行,避免了读写操作之间可能出现的不一致状态。但是,这也会对性能产生比较大的影响,因此一般情况下不适用。

这是最高的隔离级别,它确保事务按照一定的顺序执行,就像所有事务都是串行执行一样。这样可以避免脏读、不可重复读和幻读。

优点是数据一致性最高,但并发度最低,因为事务之间需要严格的序列化,可能导致大量的锁竞争和等待。

相关推荐