数据库并发控制原理详解

数据库并发控制原理

数据库属于公共资源库,当多个事务并发处理数据库数据时,如果控制不当则会造成数据的不一致性,出现数据混乱。对此,数据库引入了锁机制来解决这一问题。为了弄清这个问题,首先要明白为什么多事务并发时会出现数据的不一致性,这要从数据库事务说起。

那数据库事务是个什么东东呢?其实简而言之,就是多个有关数据库的操作要么都一次性全部完成,要么都不完成。不能出现某些数据库操作执行完了,而另外一些数据库操作失败的情况,一个事务内的所有数据库操作要“同生共死”,梁山好汉的气概啊。事务有以下特点:

原子性:所谓原子性就是不可分割的意思,就好像化学中原子是参与化学反应的基本单位一样。也就是说一个事务中的多个数据库操作是一个整体,不能分割开来,部分执行,部分不执行,要么全部执行,要么都不执行,即是前面所说的“同生共死”的意思。

‚一致性:所谓一致性就是当数据库只包含成功提交事务的结果时,我们就认为数据库处于一致性状态,也就是说最终的结果要符合成功提交事务后的预期值。举个例子吧,有这样一个事务包含两个操作,一个是从A账户取出100元,另一个操作是把这一百元存入B账户中,这两个操作都执行和不都执行时,数据库都处于一致性状态,但是如果前一个操作成功了,而后一个操作失败了,这时数据库就处于不一致状态,因为这不符合一个事务成功提交后的结果预期啊,少了100元啊。可见一致性和前面的原子性密切相关啊。网上有人解释说一致性就是事务执行前后数据的一致性,废话,一致性到底是啥等于没说,而且误导人。

ƒ隔离性:所谓隔离性就是说不同的事务执行之间是相互独立的,互不干扰,这是数据库并发的基础。

④持续性:所谓持续性就是说一旦事务成功提交,其对数据库中数据的改变是永久性的。

事务可以并发,但是对数据的修改必须串行。由数据库事务的原子性和一致性可知,必须一个事务彻底执行完后才能执行另外一个事务,否则就会出现事务并发引起的数据混乱的问题。数据库并发可能出现的问题如下:

丢失修改:两个事务T1T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致了T1的修改丢失。

‚不可重复读:事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到的值与前一次不同。

ƒ读脏数据:事务T1修改某一数据,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1修改过的数据恢复原值,T2读到的数据与数据库中的值就会不一致。

产生上述三种数据不一致性的主要原因是并发破坏了事务的隔离性。并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免数据的不一致。

并发控制的主要技术有:封锁、时间戳、乐观控制法。DBMS一般采用封锁的方法。

所谓封锁就是事务T在对某个数据对象操作之前,先向系统发出请求,对其加锁。加锁后事务T对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。而锁又分为排它锁和共享锁:

排它锁又称写锁或悲观锁:若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加其他任何类型的锁,直到T释放A上的锁。由排它锁的这个特点可知道悲观锁的并发访问性不好,效率低,因为它是串行存取数据。

共享锁又称读锁或乐观锁:在事务T对数据对象A加上S锁后,则事务T可以读A但不能修改A,其他事务只能对AS锁,不能加X锁,知道T释放A上的锁。这就保证了其他事务可以读取A,但在T释放S锁之前不能修改A。由此特点可知乐观锁以较大的锁粒度获得了较好的并发访问性能。

乐观锁和悲观锁的设计体现了可串行化调度策略和锁方式的基本思想原则 。

可串行化调度策略:

让冲突操作串行执行,非冲突操作并行执行。也就是说事务的并行执行当且仅当其结果与这些事务按某一个次序串行执行时的结果相同时,才是正确的。可串行性是并行事务执行结果正确性的惟一准则

锁方式的基本思想原则 :

事务对任何数据的操作必须先申请该数据项的锁,只有申请到锁后,即加锁成功后,才可以对数据项进行操作。操作结束后,要及时释放已申请的锁。通过锁的共享及排他的特性,实现事务的可串行化调度。

  那么在运用锁时,何时申请锁,持锁时间的确定,何时释放锁等问题需要在对数据对象加锁时约定一些规则加以解决,这就要引入三级封锁协议:

一级封锁协议:事务T在修改数据对象前必须对其加X锁,直到事务结束才释放锁------------->可解决数据“丢失修改”的问题。

二级封锁协议:在一级封锁协议的基础上,如果事务T需要读取数据,则必须对其加S锁,读完后立即释放---------------->可解决“脏读”、“丢失修改”的问题。

三级封锁协议:在一级封锁协议的基础上,加上事务T在读取A之前必须加S锁,直到事务T结束才释放S---------->可解决“脏读”、“丢失修改”、“不可重复读”的问题。

 

数据库事务在程序中的具体应用:

现在我们用的关系式数据库基本上都支持事务的功能。JDBC支持事务,也是依赖于数据库的,connection.commit(),rollback()就是调用数据库的commitrollback。很明显,HIBERNATE/SPRING的事务也是依赖JDBC的。SPRING的声明式事务,利用了AOP,在方法的起点切入事务的起点,在方法调用的终点切入事务的终点(提交),捕获异常中回滚事务。

注:springhibernatejdbc事务的比较(酝酿。。。勿忘写)

                                                                                                                                                     

 

 

 

 

 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库课程设计报告 酒店管理系统的设计 系 部 信息工程系 专 业 计算机软件专业 班 级 学 号 ____________ 姓 名 _______________课 题 _____________ 指导教师 报告成绩______________ 目 录 1 课程设计目的及要求 1 2 课程设计的主要内容 1 3数据库设计 1 3.1 需求分析 1 3.1.1对功能的需求 1 3.1.2数据流图 2 3.1.3 数据字典 4 3.2概念设计 6 3.2.1实体E-R图 6 3.2.2概念设计的总体E-R图 9 3.3逻辑设计 9 3.4物理设计 10 4程序模块设计 11 4.1 用户登录模块设计 11 4.1.1用户界面模块分析 11 4.1.2运行结果 12 4.2 住宿管理模块设计 13 4.2.1住宿管理模块分析 13 4.2.2运行结果 14 4.3 消费模块设计 15 4.3.1消费模块分析 15 4.3.2运行结果 15 5 小结 16 酒店管理系统系统的设计 1 课程设计目的及要求 数据库课程设计是为数据库原理及应用课程而独立开设的实践性课程。数据库课程设 计对于巩固数据库知识,加强学生的实际动手能力和提高学生综合素质十分必要。本课 程分为系统分析与数据库设计、应用程序设计和系统集成调试三个阶段进行。 数据库课程设计的主要目标是: a.加深对数据库系统、程序设计语言的理论知识的理解和应用水平。 b.通过设计实际的数据库系统应用课题,进一步熟悉数据库管理系统的操作技术,提 高动手能力,提高分析问题和解决问题的能力。 2 课程设计的主要内容 系统分析与数据库设计阶段 a. 通过社会调查,选择一个实际应用数据库系统的课题。 b.进行系统需求分析和系统设计,写出系统分析和设计报告。 c.设计数据模型并进行优化,确定数据库结构、功能结构和系统安全性和完整性要求 。 应用程序设计阶段 a.完成数据库定义工作,实现系统数据的数据处理和数据录入。 b.实现应用程序的设计、编程、优化功能,实现数据安全性、数据完整性和并发控制 技术等功能,并针对具体课题问题提出解决方法。 c.系统集成调试阶段 对系统的各个应用程序进行集成和调试,进一步优化系统性能,改善系统用户界面。 3数据库设计 3.1 需求分析 3.1.1对功能的需求 a.系统帐号管理 第一次用一个管理员账号(系统给定)登陆,登陆成功后,可以设置其他用户,包括 密码、权限等。 b.消费管理 为消费客户查询并分配餐桌,纪录客户用餐情况并结帐。 c.住宿管理 为住宿客户查询并分配房间,纪录客户住宿情况并结帐。 3.1.2数据流图 绘制数据流程图的目的是为了方便开发人员与用户的交流,以及为系统的设计提供依 据。数据流程图的绘制过程通常采用自顶向下,逐层分解,直到功能细化为止,形成若 干层次的数据流程图。酒店管理系统的数据流程图如下所示: 顶层: 图3-1 酒店管理系统顶层数据流图 0层: 图3-2酒店管理系统0层数据流图 1层: 2号图: 3号图: 4号图: 图3-3酒店管理系统1层数据流图 3.1.3 数据字典 该系统具体功能模块以数据字典表示如下: 数据字典(DD,Data Dictionary):是以特定格式记录下来的、对系统的数据流程图中各个基本要素(数据 流、加工、存储和外部项)的内容和特征所作的完整的定义和说明。数据字典是对数据 流程图的重要补充和说明。现简要列出本系统的部分数据字典。 a.外部实体卡片的定义,如表3-4所示。 表3-4 外部实体条目 "名称:顾客 " "总编号:1-001 " "说明:客户 编" "号:001 " "输入数据流:无 " "输出数据流:无 " "名称:管理员 " "总编号:1-002 " "说明:管理员 " "编 号:002 " "输入数据流:登陆信息 " "输出数据流:无 " b.处理过程卡片的定义,如表3-5所示。 表3-5 处理过程条目 "名称:管理员信息查看 总 " "编号:2-001 " "别名:提交登录请求后,查看管理员信息 " "编 号:P1.2 " "数据流来源:D1 " "数据流去向:管理员 " "名称:消费品信息查看 " "总编号:2-002 " "别名:无 " "编 号:P2.1 " "数据流来源:D2 " "数据流去向:客户、管理员 " "名称:预定客房审核 " "总编号:2-003 " "别名:客户提交未审核订单,管理员审核 " "编 号:P3.2 " "数据流来源:P3.1 " "数据流去向:管理员、D4 " "名称:客房信息查看 总 " "编号:2-004 " "别名:无 " "编 号:P4.1 " "数据流来源:D5 " "数据流去向:管理员、客户 " c.数据流卡片的定义,如表3-6所示。 表3-6 数据
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值