所谓事物是用户定义的一个数据库操作序列,这些操作要么全做要么不做,是一个不可分割的工作单位。
事物和程序是两个概念。一般来说,一个程序包含多个事务。
定义事务的语句
Begin transaction(开始)
Commit(提或结束)
Rollback(结束)
原子性(A):组成事务的多个数据库操作是一个不可分割的单元
(强调整体性,哪怕是最后一步错了,前面的步骤都要撤销)
一致性(C):事务完成时,必须是相关的数据库任然保持一致状态
隔离性(I):多个事务并发执行时,彼此互不干扰
持久性(D):事务完成后数据库的所有修改永久性有效(即使系统出现故障,也可以恢复)
ACID特性可能遭到破坏的因素
֍多个事务并行运行时,不同事务的操作交叉执行
֍事务在运行过程中被强行停止
数据库是一个共享资源,可以供多个用户使用。允许多个用户同时使用同一个数据库的数据库系统称为多用户数据库系统。例如飞机订票数据库系统、银行数据库系统等都是多用户数据库系统。在这样的系统中,在同一时刻并发运行的事务数可达数百上千个。
丢失修改:两个事务同时对一张表进行修改时,只有一个生效,另一个修改丢失。
读脏数据:一个事务读取了另一个事务在回滚前修改的数据。
不可重读:一个事务读取某数据后,该数据被另一事务更新,当他在读进行教研室发现数据不一致。
解决:锁定机制
锁定管理包括:加锁、锁定和解锁。
锁级别:粒度
锁的粒度小 并发性高 但系统开销大
锁的粒度大 并发性低 但系统开销小
主要技术:封锁
1)封锁就是事务T在对某数据对象(例如:表、记录)操作之前,先向系统发出请求,对其加锁
(2)加锁后事务T就对数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象
封锁类型
不同的锁有不同的控制功能;即,一个事务对数据对象加锁后可有怎样的控制由它的封锁类型决定。
(1)排他锁(简称X锁,或写锁)
含义:若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。
功能:保证其他事务在事务T释放数据对象A上的锁之前不能在读和修改A。
(2)共享锁(简称S锁,或读锁)
含义:若事务T对数据对象A加上S锁,则其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁
功能:保证其他事务可以读数据对象A,但在事务T释放A上的S锁之前不能对A做任何修改
内容:事务T在修改数据对象A之前必须对其加X锁,直到事务结束才释放。
可解决的问题:“丢失修改”问题
内容:在一级封锁协议的基础上,另外加上事务T在读取数据对象A之前必须对其加S锁,读完后立即释放。
可以解决的问题:“丢失修改”、“读脏数据”问题。
本文摘自全国计算机等级考试教材系列(三级数据库技术教程)——主编 赵宏杰
本文分享自 ellipse数据库技术 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!