数据库隔离级别为串行化和悲观锁有什么区别

小编 273

数据库隔离级别为串行化和悲观锁有本质的区别,即概念不同和性质不同。概念不同在于,数据库隔离级别为串行化是指并发事务之间是串行化的,而悲观锁是对于外界的修改持保守态度,在整个数据处理中数据处于锁定状态。

1.概念不同

数据库隔离级别为串行化是指并发事务之间是串行化的;通常意味着读取需要获取共享读锁,更新需要获取排他写锁,如果SQL使用WHERE语句,还会获取区间锁,这是较高的隔离级别。

而悲观锁是对于外界的修改持保守态度,在操作共享数据时,“悲观锁”即认为数据出现冲突的可能性更大,因此在整个数据处理中数据处于锁定状态。

2.性质不同

数据库的四种隔离级别:脏读、不可重复读、可重复读、串行化,虽然四种隔离级别能够处理事务问题,但是不够灵活,于是有了悲观锁和乐观锁。因此,串行化是事务的隔离级别,也是所有关系型数据库应该具备的隔离级别;悲观锁是一种实现串行化的方式,最典型的悲观锁就是两段锁。但是串行化有很多种实现方式,比如悲观锁、乐观锁、MVCC等。

延伸阅读

数据库的隔离级别有哪些

为了达到事务的四大特性,数据库定义了4种不同的事务隔离级别,由低到高依次为读取未提交(Read uncommitted)、读取已提交(Read committed)、可重复读(Repeatable read)、可串行化(Serializable)。

1.读取未提交(Read uncommitted)

读取未提交是最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。

2.读取已提交(Read committed)

读取已提交允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。

3.可重复读(Repeatable read)

可重复读是指对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读。可重复读能解决部分幻读问题。当A select的时候,是快照读,B insert多少条都不会影响A的读。但当A update的时候,就是当前读,会生成新的快照点,导致幻读问题出现。

4.可串行化(Serializable)

可串行化是较高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

回复

我来回复
  • 暂无回复内容

站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部