数据库事务的相关问题

---乐观锁和悲观锁---

悲观锁:

       保守态度,它指的是数据对于外界的(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。

    悲观锁的实现,往往依靠数据库提供的锁机制。在悲观锁的情况下,为了保证事务的隔离性,就需要一致性锁定读。读取数据时给加锁,其它事务无法修改这些数据。修改删除数据时也要加锁,其它事务无法读取这些数据。

乐观锁:

       积极开朗的态度,乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。

        而乐观锁机制在一定程度上解决了这个问题。乐观锁,大多是基于数据版本( Version )记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

事务的特性: ACID 原子性,一致性,隔离性,持久性

        |---隔离性:一个事务执行的过程中,不应该受到其他的事务的干扰

在不考虑隔离性问题的情况下,会引发一些的问题

·脏读 --> 一个事务读到另一个事务未提交的数据

·不可重复读 --> 一个事务读到了另一个事务已经提交的update数据,导致多次查询结果不一致

·虚读(幻读) --> 一个事务读到了另一个事务已经提交的insert数据,导致多次查询的结果不一样


猜你喜欢

转载自blog.csdn.net/WICHER_WU/article/details/80462755
今日推荐