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锁,直到事务完结才开释。

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