事务
用书本上的话来说,事务是用户定义的一个数据库操作序列,这些操作序列要么全做,要么都不做,他们是一个不可分割的工作单元,是恢复和并发控制的基本单元。
事务的ACID特性:
原子性(Atomicity)
事务是数据库的逻辑工作单元,事务中包括的诸操作要么都做,要么都不做,不可分割。
一致性(Consistency)
事务的执行结果必须使数据库从一个一致性状态转变到另一个一致性状态。
隔离性(Isolation)
一个事务的执行不能被其他事务干扰。
持续性(Durability)
一个事务一旦提交,他对数据库中的数据的改变就应该是永久的,接下来的其他操作或者故障不应该对其执行结果右任何影响。
悲观锁
保守的态度,它指的是数据对于外界的(包括系统当前的事务或来自外部系统)的事务处理修改持保守态度。因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制。在悲观锁的情况下,为了保证事务的隔离性,就需要一致性锁定读。读取数据时给加锁,其它事务无法修改这些数据;修改删除数据时也要加锁,其它事务无法读取这些数据。这样就保证了操作最大程度的独占性,但随之而来的就是数据库性能的大量开销。
乐观锁
积极的态度,乐观锁机制采取了更加宽松的加锁机制。为了减小悲观锁的开销,乐观锁应运而生,它在一定程度上解决了这个问题。乐观锁,大多是基于数据版本( Version )记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。