数据库隔离级别为串行化和悲观锁有什么区别
数据库隔离级别为串行化和悲观锁有本质的区别,即概念不同和性质不同。概念不同在于,数据库隔离级别为串行化是指并发事务之间是串行化的,而悲观锁是对于外界的修改持保守态度,在整个数据处理中数据处于锁定状态。
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的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。