数据库

来源:互联网 发布:首次适应算法java 编辑:程序博客网 时间:2024/06/03 18:47

隔离是属于ACID中的一个,逻辑单元必须具备这四个属性才能称为事务。
隔离级别定义了事务与事务之间的隔离程度。
隔离级别与并发性是互相矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。
隔离级别:

  • 未提交读(read uncommitted): 当事务A更新某条数据时,不容许其他事务来更新该数据,但可以读取。
  • 提交读(read committed): 当事务A更新某条数据时,不容许其他事务进行任何操作包括读取,但事务A读取时,其他事务可以进行读取、更新
  • 重复读(repeatable read): 当事务A更新数据时,不容许其他事务进行任何操作,但当事务A进行读取时,其他事务只能读取,不能更新。
  • 序列化(serializable): 最严格的隔离级别,事务必须依次进行。

    悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。