乐趣区

关于数据库:数据库复试

1. 事务

1.1 概念

事务 是用户定义的一个 数据库操作序列,这些操作要么全做,要么全不做,是一个整体。

1.2 事务的 ACID 个性

  • 原子性(Atomicity): 事务中的操作要么都做,要么都不做。
  • 一致性(Consistency): 事务执行的后果必须是使数据库从一个状态到另一个状态。
  • 隔离性(Isolation): 一个事务的执行不能被其余事务烦扰。
  • 持续性(Durability): 一个事务一旦提交,它对数据库的影响就是永久性的。

事务 ACID 个性可能受到毁坏的因素有:
(1)多个事务并行运行时,不同事务的操作穿插运行。
(2)事务在运行过程中被强行进行。

2. 并发管制

2.1 失落批改
两个事务 T1 和 T2 读入同一数据并批改,T2 提交的后果笼罩了 T1 提交的后果,导致 T1 的批改被失落。
2.2 不可反复读
事务 T1 读取数据后,事务 T2 执行更新操作(增、删、改),T1 无奈再现提取前一次读取的后果。
2.3 读“脏”数据
事务 T1 批改某一数据,事务 T2 读取同一数据后,T1 因为某种原因被撤销,这时候被 T1 批改的数据恢复到原值,导致 T2 读取到的数据与数据库中的数据不统一,则 T2 读到的数据就为“脏”数据。
解决方案
在并发环境下,事务的隔离性很难保障,因而会呈现很多并发一致性问题。产生并发不一致性问
题的次要起因是毁坏了事务的隔离性。解决办法是通过 并发管制 来保障隔离性。并发管制能够通
过 封闭 来实现,然而封闭操作须要用户本人管制,相当简单。数据库管理系统提供了事务的 隔 离级别,让用户以一种更轻松的形式解决并发一致性问题。

3. 封闭

3.1 封闭类型

  • 排他锁 又称 写锁。若事务 T 对数据对象 A 加上 X 锁,则只容许 T 读取和批改 A, 其余事务都不能再对 A 加任何类型的锁,直到 T 开释 A。这就保障了其余事务在 T 开释 A 之前不能读取或是批改 A.
  • 共享锁 又称 读锁。若事务 T 对数据对象加上 S 锁,则容许 T 读取 A 但不能批改 A, 其余事务只能对 A 加 S 锁,而不能加 X 锁,直到 T 开释 A 上的 S 锁为止。这就保障了其余事务能够读取 A,但在 T 开释 A 上的 S 锁之前都不能批改 A。

3.2 封闭协定
(1) 概念 :在使用 X 锁和 S 锁的过程中约定的规定。例如,何时申请 X 锁和 S 锁,封闭的工夫,何时开释等。
(2) 品种

  • 一级封闭协定:事务 T 在 批改数据 R 之前 必须先对其加 X 锁,直到事务完结才开释。

如果仅仅是读数据而不对其进行批改,则不须要加锁,所以它不能保障不反复读和读“脏”数据。

  • 二级封闭协定:在一级封闭协定的根底上减少事务 T 在 读取数据 R 之前 必须先对其加 S 锁,读完 后即可开释。

因为读完后即可开释,所以不能保障可反复读。

  • 三级封闭协定:在一级封闭协定的根底上减少事务 T 在 读取数据 R 之前 必须先对其加 S 锁,直到事务完结 才开释。

能够避免失落批改、读“脏”数据、不可反复读。

退出移动版