数据库的控制功能
作者:互联网
事务管理
事务是一个操作序列,这些操作“要么都做,要么都不做”,是数据库环境中不可分割的逻辑工作单位。
在SQL语言中,事务定义的语句有以下三条:
- BEGIN TRANSACTION
事务开始 - COMMIT
事务提交。该操作表示事务成功地结束,它将通知事务管理器该事务的所有更新操作现在可以被提交或永久保存。 - ROLLBACK
事务回滚。该操作表示事务非成功地结束,它将通知事务管理器出故障了,数据库可能处于不一致状态,该事务的所有更新操作必须回滚或撤销。
事务具有原子性 (Atomicity)、一致性 (Consistency)、隔离性 (Isolation) 和持久性 (Durability)。这4个称为事务的ACID性质。
- 原子性
事务是原子的,要么都做,要么都不做。 - 一致性
事务执行的结果必须保证数据库从一个一致性状态变到另一个一致性状态。 - 隔离性
事务相互隔离。当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的。 - 持久性
一旦事务成功提交,即使数据库崩溃,其对数据库的更新操作也将永久有效。
并发控制
所谓并发操作,是指多用户共享的系统中许多用户可能同时对同一数据进行操作。
-
并发操作带来的问题
丢失修改:所做的修改未能成功保存
不可重复读:一个事务读取数据时,另一个数据正在对该数据进行操作
读脏数据:一个事务读取到的数据后,另一个事务对原数据进行了回滚操作
-
并发控制技术
并发控制的主要技术是封锁。
- 封锁
- 排它锁(X锁)
若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁 - 共享锁(S锁)
若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能A进行任何修改。
- 排它锁(X锁)
- 三级封锁协议
- 一级封锁协议
事务在修改数据R之前必须先对其加X锁,直到事务结束才释放。
事务结束包括正常结束 (COMMIT) 和非正常结束 (ROLLBACK)。
一级封锁协议可以解决丢失更新问题。 - 二级封锁协议
在一级封锁协议的基础上,加上事务T在读数据R之前必须先对其加S锁,读完后
即可释放S锁。
二级封锁协议可以解决读脏数据的问题。
但是由于二级封锁协议读完了数据后即可释放S锁,所以不能保证可重复读。 - 三级封锁协议
在一级封锁协议的基础上,加上事务T在读数据R之前必须先对其加S锁,直到事务结束后
即可释放S锁。
三级封锁协议除了防止丢失修改和不读“脏”数据外,还进一步防止了不可重复读。
- 一级封锁协议
- 封锁
两段封锁协议
所谓两段封锁协议,是指所有事务必须分两个阶段对数据项加锁和解锁。
即事务分两个阶段,第一阶段是获得封锁,事务可以获得任何数据项上的任何类型的锁,但不能释放;第二阶段是释放封锁,事务可以释放任何数据项上的任何类型的锁,但不能申请。并发调度的可串行性
由于串行的结果一定是正确的,所以如果并行的结果与串行的结果不一致,则并行就是错误的。封锁的粒度
封锁对象的大小称为封锁的粒度。
封锁的对象可以是逻辑单元(如属性、元组、关系、索引项、整个索引甚至整个数据库),也可以是物理单元(如数据页或索引页)。
标签:封锁,控制,事务,协议,数据库,功能,释放,并发,操作 来源: https://www.cnblogs.com/Zkang/p/13599463.html