Spring事务-基础-1(数据库事务、事务并发、数据库锁)

2017-05-29  本文已影响276人  老猫头

Spring事务-基础-1

01 何为数据库事务

ACID

  1. 原子性(Atomic)

    表示组成一个事务的数据库操作是不可分割的原子单元,只有所有的操作执行成功,整个事务才提交,事务中任何一个数据库操作失败,已执行的任何操作都必须撤销。

  2. 一致性(Consistency)

    事务操作成功之后,数据库所处的状态和它的业务规则是一致的,即数据不会被破坏。
    如从A账户操作转账100元到B账户,不管操作成功或者失败,A和B的存款总额是不变的。

  3. 隔离性(Isolaction)

    在并发数据操作时,不同的事务拥有各自的数据空间,他们各自的操作不会对对方产生干扰。

  4. 持久性(Durabiliy)

    一旦事务提交成功之后,十五中所有的数据操作都必须持久化到数据库中。

数据库系统一般采用重执行日志保持原子性,一致性和持久性。

02 数据库并发产生的问题

数据库中的数据被多个事务同时访问产生的5类问题。3类数据读问题(脏读、不可重复读和幻象读)以及两类更新问题(第一类丢失问题和第二类丢失问题)

幻象读和不可重复读是两个容易混淆的概念,幻象读是指读到了其他已经提交事务的新增数据,而不可重复读是指读到了已经提交事务的更改数据(更改或删除),为了避免这两种情况,采用的对策是不同的,防止读取到更改数据,只需要对操作的数据添加行级锁,阻止操作过程中数据发生变化,而防止读取到新增数据,则需要添加表级锁。

03 数据库锁机制

数据库并发会引发很多问题,数据库通过锁机制解决并发访问的问题,虽然不同的数据库在实现细节上存在差别,但基本原理上都一致。

按锁的对象不同,一般可以分为表级锁和行级锁。从并发事务锁定的关系上看,可以分为共享锁和独占锁,共享锁会防止独占锁定,但允许其他的共享锁定。而独占锁定即防止其他的独占锁定,也防止其他的共享锁定。为了更改数据,数据库必须在进行更改的行上施加行独占锁定,INSERT、UPDATE、DELETE和SELECT FOR UPDATE 语句都会隐式采用必要的行级锁定。

上一篇 下一篇

猜你喜欢

热点阅读