zoukankan      html  css  js  c++  java
  • 什么是数据库并发控制?数据库并发控制的主要方法是?

    数据库是一个共享资源,可以提供多个用户使用。这些用户程序可以一个一个地串行执行,

    每个时刻只有一个用户程序运行,

    执行对数据库的存取,

    其他用户程序必须等到这个用户程

    序结束以后方能对数据库存取。但是如果一个用户程序涉及大量数据的输入

    /

    输出交换,则

    数据库系统的大部分时间处于闲置状态。

    因此,

    为了充分利用数据库资源,

    发挥数据库共享

    资源的特点,

    应该允许多个用户并行地存取数据库。

    但这样就会产生多个用户程序并发存取

    同一数据的情况,

    若对并发操作不加控制就可能会存取和存储不正确的数据,

    破坏数据库的

    一致性,

    所以数据库管理系统必须提供并发控制机制。

    并发控制机制的好坏是衡量一个数据

    库管理系统性能的重要标志之一。

     

     

    DM

    用封锁机制来解决并发问题。它可以保证任何时候都可以有多个正在运行的用户程序,

    但是所有用户程序都在彼此完全隔离的环境中运行。

     

     

    一、

      

    并发控制的预备知识

     

     

    (

    )  

    并发控制概述

     

     

    并发控制是以事务(

    transaction

    )为单位进行的。

     

     

    1.  

    并发控制的单位

    ――

    事务

     

     

    事务是数据库的逻辑工作单位,它是用户定义的一组操作序列。一个事务可以是一组

    SQL

    语句、一条

    SQL

    语句或整个程序。

     

     

    事务的开始和结束都可以由用户显示的控制,

    如果用户没有显式地定义事务,

    则由数据库系

    统按缺省规定自动划分事务。

     

     

    事务应该具有

    4

    种属性:原子性、一致性、隔离性和持久性。

     

     

    1

    )原子性

     

     

    事务的原子性保证事务包含的一组更新操作是原子不可分的,也就是说这些操作是一个整

    体,

    对数据库而言全做或者全不做,

    不能部分的完成。

    这一性质即使在系统崩溃之后仍能得

    到保证,

    在系统崩溃之后将进行数据库恢复,

    用来恢复和撤销系统崩溃处于活动状态的事务

    对数据库的影响,

    从而保证事务的原子性。

    系统对磁盘上的任何实际数据的修改之前都会将

    修改操作信息本身的信息记录到磁盘上。

    当发生崩溃时,

    系统能根据这些操作记录当时该事

     

    务处于何种状态,

    以此确定是撤销该事务所做出的所有修改操作,

    还是将修改的操作重新执

    行。

     

     

    2

    )一致性

     

     

    一致性要求事务执行完成后,

    将数据库从一个一致状态转变到另一个一致状态。

    它是一种以

    一致性规则为基础的逻辑属性,

    例如在转账的操作中,

    各账户金额必须平衡,

    这一条规则对

    于程序员而言是一个强制的规定,

    由此可见,

    一致性与原子性是密切相关的。

    事务的一致性

    属性要求事务在并发执行的情况下事务的一致性仍然满足。

    它在逻辑上不是独立的,

    它由事

    务的隔离性来表示。

     

     

    3

     

    隔离性

     

     

    隔离性意味着一个事务的执行不能被其他事务干扰。

    即一个事务内部的操作及使用的数据对

    并发的其他事务是隔离的,

    并发执行的各个事务之间不能互相干扰。

    它要求即使有多个事务

    并发执行,看上去每个成功事务按串行调度执行一样。这一性质的另一种称法为可串行性,

    也就是说系统允许的任何交错操作调度等价于一个串行调度。

    串行调度的意思是每次调度一

    个事务,在一个事务的所有操作没有结束之前,另外的事务操作不能开始。由于性能原因,

    我们需要进行交错操作的调度,

    但我们也希望这些交错操作的调度的效果和某一个串行调度

    是一致的。

     

    DM

    实现该机制是通过对事务的数据访问对象加适当的锁,从而排斥其他的事

    务对同一数据库对象的并发操作。

     

     

    4

    )持久性

     

     

    系统提供的持久性保证要求一旦事务提交,

    那么对数据库所做的修改将是持久的,

    无论发生

    何种机器和系统故障都不应该对其有任何影响。例如,自动柜员机(

     

    ATM

    )在向客户支付

    一笔钱时,

    就不用担心丢失客户的取款记录。

    事务的持久性保证事务对数据库的影响是持久

    的,即使系统崩溃。正如在讲原子性时所提到的那样,系统通过做记录来提供这一保证。

     

     

    DM

    没有提供显式定义事务开始的语句,第一个可执行的

    SQL

    语句

    (

    CONNECT

    语句外

    )

    隐含事务的开始,

    但事务的结束可以由用户显式的控制。

    DM

    中以下几种情况都结束

     

    (

    常,非正常

    )

    某一事务:

     

     

    1

    )当某一连接的属性设置为自动提交,每执行一条语句都会提交;

     

     

     

    2

    )遇到

    COMMIT/ROLLBACK

    语句,便提交

    /

    回滚一事务;

     

     

    3

    )当系统的

     

    DDL

    自动提交开关打开时(缺省为打开),遇到

    DDL

    语句则自动提交该

    DDL

    语句和以前的

    DML

    DDL

    操作;

     

     

    4

    )事务所在的程序正常结束和用户退出;

     

     

    5

    )系统非正常终止时;

     

     

    说明:

    DM

    在配置文件中提供了

    DDL

    语句的自动提交开关

    DDL_AUTO_COMMIT

     

    当此配

    置项的值为

     

    1

    (缺省情况)时,所有

    DDL

    语句自动提交;当此配置项的值为

    0

    时,除

    CREATEDATABASE

    ALTERDATABASE

    CREATESCHEMA

    语句外的所有

    DDL

    语句

    都不自动提交。

     

     

    DM

    中的一致性是以事务为基础的。

    DM

    通过提交和回滚分别用于将对数据库的修改永久化

    和废除,但是无论是提交和回滚,

    DM

    保证数据库在每个事务开始前、结束后是一致的。为

    了提高事务管理的灵活性,

    DM

    提供了设置保存点(

    SAVEPOINT

    )语句和回滚到保存点语

    句。

    保存点提供了一种灵活的回滚,

    事务在执行中可以回滚到某个保存点,

    在该保存点以前

    的操作有效,而以后的操作被回滚掉。

     

     

    DM

    中的事务同样具有上述

    4

    个属性:原子性、一致性、隔离性和持久性。

     

     

    2. 

    并发操作与数据的不一致性

     

     

    如果没有锁定且多个用户同时访问一个数据库,

    则当他们的事务同时使用相同的数据时可能

    会发生问题,导致数据库中的数据的不一致性。

     

     

    一个最常见的并发操作的例子是火车

    /

    飞机订票系统中的订票操作。例如,在该系统中的一

    个活动序列:

     

     

     

    甲售票员读出某航班的机票张数余额

    A

    ,设

    A=16

     

     

      

    乙售票员读出同一航班的机票张数余额

    A

    ,也是

    16

     

     

      

    甲售票员卖出一张机票,修改机票张数余额

    A=A-1=15,

    A

    写回数据库;

     

  • 相关阅读:
    四则运算1
    四则运算3
    数组1
    四则运算单元测试
    四则运算2
    数组3
    数组2
    spring aop对service层日志和异常的处理
    Linux设置开机启动
    数据仓库开发——Kettle使用示例
  • 原文地址:https://www.cnblogs.com/erma0-007/p/8635416.html
Copyright © 2011-2022 走看看