精华内容
下载资源
问答
  • 关系数据库——并发控制

    千次阅读 多人点赞 2019-12-02 14:04:03
    并发控制 多用户数据库:允许多个用户同时使用的数据库(订票系统) 不同的多事务执行方式: 1.串行执行:每个时刻只有一个事务运行,其他事务必须等到这个事务结束后方能运行。 2.交叉并发方式: 单处理机...

    并发控制

    多用户数据库:允许多个用户同时使用的数据库(订票系统)

    不同的多事务执行方式:

             1.串行执行:每个时刻只有一个事务运行,其他事务必须等到这个事务结束后方能运行。

             2.交叉并发方式:

    单处理机系统中,事务的并发执行实际上是这些并行事务的并行操作轮流交叉运行(不是真正的并发,但是提高了系统效率)

    3.同时并发方式:

    多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行

    并发执行带来的问题:

             多个事务同时存取同一数据(共享资源)

             存取不正确的数据,破坏事务一致性和数据库一致性

    概述

    并发操作带来的数据不一致性包括

             1)丢失修改(lost update

             2)不可重复读(non-repeatable read

             3)读脏数据(dirty read

    记号:Wx)写数据x           Rx)读数据x

     

    并发控制机制的任务:

             1)对并发操作进行正确的调度

             2)保证事务的隔离性

             3)保证数据库的一致性

    并发控制的主要技术

             1)封锁(locking)(主要使用的)

             2)时间戳(timestamp

             3)乐观控制法(optimistic scheduler

             4)多版本并发控制(multi-version concurrency control MVCC

    封锁

    封锁:封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象

     

    确切的控制由封锁的类型决定

    基本的封锁类型有两种:排它锁(X锁,exclusive locks)、共享锁(S 锁,share locks

    排它锁又称写锁,对A加了排它锁之后,其他事务不能对A 任何类型的锁(排斥读和写)

    共享锁又称读锁,对A加了共享锁之后,其他事务只能对AS锁,不能加X锁(只排斥写)

    (很重要)

    封锁协议

    在运用X锁和S锁对数据对象加锁时,需要约定一些规则:封锁协议(Locking Protocol

    何时申请X锁或S锁、持锁时间、何时释放

    对封锁方式制定不同的规则,就形成了各种不同的封锁协议。

    常用的封锁协议:三级封锁协议

    三级封锁协议在不同程度上解决了并发问题,为并发操作的正确调度提供一定的保证。

     

    1、一级封锁协议

    事务T在修改数据R之前,必须先对其加X锁,直到事务结束(commit/rollback)才释放。

    一级封锁协议可以防止丢失修改

    如果是读数据,不需要加锁的,所以它不能保证可重复读和不读“脏”数据。

    2 二级封锁协议

             在一级封锁协议的基础(写要加X锁,事务结束释放)上,增加事务T在读入数据R之前必须先对其加S锁,读完后即可释放S锁。(读要加S锁,读完即释放)

    二级封锁协议除了可以防止丢失修改,还可以防止读脏数据

    由于读完数据即释放S锁,不能保证不可重复读

    3、三级封锁协议:

             在一级封锁协议基础上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束后释放。

    三级封锁协议除了可以防止丢失修改和读脏数据外,还防止了不可重复读

    三级封锁协议的主要区别是什么操作需要申请锁,何时释放锁。封锁协议越高,一致性程度越高。

     

    饥饿

     

    饥饿:事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后,系统首先批准了T3的请求,T2仍然等待。 T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……T2有可能永远等待,这就是饥饿的情形

    避免饥饿的方法:先来先服务

    当多个事务请求封锁同一数据对象时,按请求封锁的先后次序对这些事务排队

    该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁。

     

    死锁

     

    死锁:事务T1封锁了数据R1 T2封锁了数据R2 T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁。 接着T2又申请封锁R1,因T1已封锁了R1T2也只能

    等待T1释放R1上的锁。 这样T1在等待T2,而T2又在等待T1T1T2两个事务永远不能结束,形成死锁。

    解决死锁的方法:预防、诊断和解除

    1、死锁的预防

    产生死锁的原因是两个或多个事务都已经封锁了一些数据对象,然后又都请求对已被其他事务封锁的数据对象加锁,从而出现死等待。

    预防死锁发生就是破坏产生死锁的条件

    方法

    1)一次封锁法:

             要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。

             存在的问题:降低系统的并发度;难以实现精确确定封锁对象

    2)顺序封锁法:

             预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实施封锁。

             存在的问题:

    维护成本:数据库系统中的封锁对象极多,并且在不断地变化

    难以实现:很难实现确定每一个事务要封锁哪些对象

    DBMS普通采用的诊断并解除死锁的方法

    2、死锁的诊断和解除

             方法:超时法和事务等待图法

             1)超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁

                      优点:实现简单

                      缺点:误判死锁;时限若设置太长,死锁发生后不能及时发现。

             2)事务等待图法:用事务等待图动态反映所有事务的等待情况事务

    等待图是一个有向图G=(TU)T为结点的集合,每个结点表示正运行的事务, U为边的集合,每条边表示事务等待的情况。若T1等待T2,则T1T2之间划一条有向边,从T1指向T2

    并发控制子系统周期性地(比如每隔数秒)生成事务等待图,检测事务。如果发现图中存在回路,则表示系统中出现了死锁。    

    解除死锁:并发控制子系统选择一个处理死锁代价最小的事务,将其撤销。

    释放该事务持有的所有的锁,使其他事务能够继续运行下去。

     

     

    串行调度

    什么样的调度是正确的?串行调度是正确的。

    (执行结果等价于串行调度的调度也是正确的,这样的调度称为可串行化调度。)

    可串行化调度

    定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这种调度策略为可串行化调度(serializable)。

    可串行性是并发事务正确调度的准则。按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。

    冲突可串行化调度

    判断可串行化调度的充分条件

    冲突操作:不同的事务对同一个数据的读写和写写操作。

    不同事务的冲突操作和同一事务的两个操作是不能交换的。

    Rix)和Wjx)不可交换,Wix)和Wjx)不可交换

    冲突可串行化调度:

    一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc’,如果Sc’是串行的,称调度Sc为冲突可串行化的调度。

     

    两段锁协议

    DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化的。目前DBMS普遍采用两段锁协议(TwoPhase Locking,简称2PL)的方法来显示并发调度的可串行性。

     

    两段锁协议是指所有事务必须分两个阶段对数据对象进行加锁和解锁。

             1)在对任何数据进行读写操作以前,首先要申请并获得对该数据的锁。

             2)在释放一个锁之后,事务不再申请和获得其他任何的锁。

    “两段”锁的含义:事务分为两个阶段

    第一阶段是获得封锁,也称为扩展阶段

    事务可以申请获得任何数据对象上的任何类型的锁,但是不能释放任何锁

    第二阶段是释放封锁,也称为收缩阶段

    事务可以释放任何数据对象上的任何类型的锁,但是不能再申请任何锁

     

    事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。

    若并发事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的

    若并发事务的一个调度是可串行化的,不一定所有事务都符合两段锁协议

     

    两段锁协议与防止死锁的一次封锁法

    一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议

    但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁

     

    封锁的粒度

    封锁对象的大小称为封锁粒度(granularity)。

    封锁的对象可以是逻辑单元(属性值、属性值集合、元组、关系、索引项、数据库),也可以是物理单元(页、物理记录)。

    选择封锁粒度原则:

             封锁粒度和系统的并发度和并发控制的开销密切相关

             封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越低,系统开销也

    越小;

    封锁的粒度越小,并发度较高,但系统开销也就越大

     

    意向锁

    意向锁:如果对一个节点加意向锁,则可说明该节点的下层节点正在被加锁;对任一节点加锁时,必须先对它的上层节点加意向锁。

    例如,对任一元组加锁时,必须先对它所在的数据库和关系加意向锁。

    三种常用的意向锁:意向共享锁(Intent Share LockIS锁);意向排它锁(Intent Exclusive LockIX锁);共享意向排它锁(Share Intent Exclusive LockSIX锁)。

     

    1IS

    如果对一个数据对象加IS锁,表示它的子节点拟加S锁。

    例如:事务T1要对R1中某个元组加S锁,则要首先对关系R1和数据库加IS

     

    2IX

    如果对一个数据对象加IX锁,表示它的子节点拟加X锁。

    例如:事务T1要对R1中某个元组加X锁,则要首先对关系R1和数据库加IX

     

    3SIX

    如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX = S + IX

     

    例如:对某个表加SIX锁,则表示该事务要读整个表(所以要对该表加S锁),同

    时会更新个别元组(所以要对该表加IX锁)

    意向锁的强度: 锁的强度是指它对其他锁的排斥程度。一个事务在申请封锁时以强锁代替弱锁是安全的,反之则不然。

    具有意向锁的多粒度封锁方法

    申请封锁时应该按自上而下的次序进行

    释放封锁时则应该按自下而上的次序进行

    优点:

             1)提高了系统并发度

             2)减少了加锁和解锁的开销

    在实际的DBMS产品中得到广泛应用。

     

    其他并发控制

    并发控制的方法除了封锁技术外,还有时间戳方法、乐观控制法和多版本并发控制。

    时间戳方法:给每一个事务盖上一个时标,即事务开始的时间。每个事务具有唯一的时间戳,并按照这个时间戳来解决事务的冲突操作。如果发生冲突操作,就回滚到具有较早时间戳的事务,以保证其他事务的正常执行,被回滚的事务被赋予新的时间戳被从头开始执行。

    乐观控制法认为事务执行时很少发生冲突,所以不对事务进行特殊的管制,而是让它自由执行,事务提交前再进行正确性检查。如果检查后发现该事务执行中出现过冲突并影响了可串行性,则拒绝提交并回滚该事务。又称为验证方法

    多版本控制是指在数据库中通过维护数据对象的多个版本信息来实现高效并发的一种策略。

    展开全文
  • 关系数据库与非关系型数据库简介

    千次阅读 2021-02-23 14:17:27
    关系数据库与非关系型数据库一、相关概念 一、相关概念 ●关系型数据库: 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 SQL语句(标准数据查询语言)就是一种基于关系型...

    一、相关概念

    关系型数据库

    • 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。
    • SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作
    • 主流的关系型数据库包括Oracle、MySQL、SQL Server、Microsoft Access、DB2等。

    非关系型数据库

    • NoSQL (NoSQL = Not only sQL ),意思是"不仅仅是 SQL",是非关系型数据库的总称。
    • 除了主流的关系型数据库外的数据库,都认为是非关系型。
    • 主流的NoSQL数据库有 Redis、MongBD、Hbase、Memcached等。

    二、关系型数据库和非关系型数据库区别

    数据存储方式不同

    • 关系型和非关系型数据库的主要差异是数据存储的方式。
    • 关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。
    • 与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。
    • 非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。

    扩展方式不同

    • SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。
    • 要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来克服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。
    • 而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。

    对事务性的支持不同

    • 如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择
      SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。
      虽然MoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。

    三、非关系型数据库产生背景

    可用于应对web2.0 纯动态网站类型的三高问题。

    • High performance——对数据库高并发读写需求
    • Huge Storage——对海量数据高效存储与访问需求
    • High Scalability && High Availability——对数据库高可扩展性与高可用性需求

    关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给web2.0的数据库发展带来新的思路。让关系数据库关注在关系上,非关系型数据库关注在存储上。例如,在读写分离的MySQL数据库环境中,可以把经常访问的数据存储在非关系型数据库中,提升访问速度。

    总结

    关系型数据库:
    实例 >> 数据库 >> 表(table) >> 记录行(row)、数据字段(column)

    非关系型数据库:
    实例 >> 数据库 >> 集合(collection) >> 键值对(key-value)
    非关系型数据库不需要手动建数据库和集合(表)。

    展开全文
  • 数据库 - 关系数据库标准语言SQL

    千次阅读 2015-05-05 09:57:12
    SQL(Structured Query Language)结构化查询语言,是关系数据库的标准语言 SQL是一个通用的、功能极强的关系数据库语言SQL特点1.综合统一 集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于...

    SQL(Structured Query Language)

    结构化查询语言,是关系数据库的标准语言
    

    SQL是一个通用的、功能极强的关系数据库语言

    SQL特点

    1.综合统一
    集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。
    可以独立完成数据库生命周期中的全部活动:
    定义关系模式,插入数据,建立数据库;
    对数据库中的数据进行查询和更新;
    数据库重构和维护
    数据库安全性、完整性控制等
    用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据的运行。
    数据操作符统一

    非关系数据模型的数据操纵语言“面向过程”,必须制定存取路径
    SQL只要提出“做什么”,无须了解存取路径。
    存取路径的选择以及SQL的操作过程由系统自动完成。
    非关系数据模型采用面向记录的操作方式,操作对象是一条记录
    SQL采用集合操作方式

     操作对象、查找结果可以是元组的集合
     一次插入、删除、更新操作的对象可以是元组的集合

    SQL是独立的语言
    能够独立地用于联机交互的使用方式
    SQL又是嵌入式语言
    SQL能够嵌入到高级语言(例如C,C++,Java)程序中,供程序员设计程序时使用

    SQL的基本概念

    基本表
    本身独立存在的表
    SQL中一个关系就对应一个基本表
    一个(或多个)基本表对应一个存储文件
    一个表可以带若干索引
    存储文件
    逻辑结构组成了关系数据库的内模式
    物理结构是任意的,对用户透明
    视图
    从一个或几个基本表导出的表
    数据库中只存放视图的定义而不存放视图对应的数据
    视图是一个虚表
    用户可以在视图上再定义视图

    学生-课程 数据库设计

    学生-课程模式 S-T :    
        学生表:Student(Sno,Sname,Ssex,Sage,Sdept)
        课程表:Course(Cno,Cname,Cpno,Ccredit)
        学生选课表:SC(Sno,Cno,Grade)
    学号 姓名 性别 年龄 所在系
    200215121 张三 21 CS
    200215122 李四 22 MA
    200215123 王五 25 IA

    定义模式

     [例1]定义一个学生-课程模式S-T
                CREATE SCHEMA “S-T” AUTHORIZATION WANG;
                 为用户WANG定义了一个模式S-T
        [例2]CREATE SCHEMA AUTHORIZATION WANG;
                <模式名>隐含为用户名WANG
    

    定义模式实际上定义了一个命名空间
    在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。
    在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。
    CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]

    [例3]
    CREATE SCHEMA TEST AUTHORIZATION ZHANG 
        CREATE TABLE TAB1(COL1 SMALLINT, 
                                                COL2 INT,
                                                COL3 CHAR(20),
                                                COL4 NUMERIC(103),
                                                COL5 DECIMAL(52)
                                              );
        为用户ZHANG创建了一个模式TEST,并在其中定义了一个表TAB1。
    

    删除模式

    DROP SCHEMA (模式名) (CASCADE|RESTRICT)
    CASCADE(级联)
    删除模式的同时把该模式中所有的数据库对象全部删除
    RESTRICT(限制)
    如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。
    当该模式中没有任何下属的对象时 才能执行。

    [例4]  DROP SCHEMA ZHANG CASCADE;
             删除模式ZHANG
             同时该模式中定义的表TAB1也被删除
    

    基本表的定义、删除与修改

    一、定义基本表

    CREATE TABLE <表名><列名> <数据类型>[ <列级完整性约束条件> ]
          [,<列名> <数据类型>[ <列级完整性约束条件>] ] …
          [,<表级完整性约束条件> ] );

    如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。

    [例5]  建立“学生”表Student,学号是主码,姓名取值唯一。
    
        CREATE TABLE Student          
              (Sno   CHAR(9) PRIMARY KEY, /* 列级完整性约束条件*/                  
                Sname  CHAR(20) UNIQUE,     /* Sname取唯一值*/
                Ssex    CHAR(2),
                Sage   SMALLINT,
                Sdept  CHAR(20)
               ); 
    
     [例6] 建立一个“课程”表Course
          CREATE TABLE  Course
                   ( Cno       CHAR(4) PRIMARY KEY,
                     Cname  CHAR(40),            
                     Cpno     CHAR(4) ,                                       
                     Ccredit  SMALLINTFOREIGN KEY (Cpno) REFERENCES  Course(Cno) 
                ); 
    
    [例7]  建立一个“学生选课”表SC
        CREATE TABLE  SC
            (Sno  CHAR(9), 
            Cno  CHAR(4),  
            Grade    SMALLINTPRIMARY KEY (Sno,Cno),  
                         /* 主码由两个属性构成,必须作为表级完整性进行定义*/
            FOREIGN KEY (Sno) REFERENCES Student(Sno),
                        /* 表级完整性约束条件,Sno是外码,被参照表是Student */
            FOREIGN KEY (Cno) REFERENCES Course(Cno)
                       /* 表级完整性约束条件, Cno是外码,被参照表是Course*/
            ); 
    

    数据类型

    SQL中域的概念用数据类型来实现
    定义表的属性时 需要指明其数据类型及长度
    选用哪种数据类型
    取值范围
    要做哪些运算

    模式与表

    每一个基本表都属于某一个模式
    一个模式包含多个基本表
    定义基本表所属模式
    方法一:在表名中明显地给出模式名
    Create table “S-T”.Student(……); /模式名为 S-T/
    Create table “S-T”.Cource(……);
    Create table “S-T”.SC(……);
    方法二:在创建模式语句中同时创建表
    方法三:设置所属的模式
    创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据搜索路径来确定该对象所属的模式
    RDBMS会使用模式列表中第一个存在的模式作为数据库对象的模式名
    若搜索路径中的模式名都不存在,系统将给出错误
    显示当前的搜索路径: SHOW search_path;
    搜索路径的当前默认值是:$user, PUBLIC

    展开全文
  • 数据库应用程序开发入门篇—— 关系数据库中的基本概念 写在前面:关系数据库是目前应用最广泛的的数据库,了解关系型数据库的基本概念,有助于应用开发。 1.关系数据库中基本概念 关系数据库,是建立在关系模型...

    数据库应用程序开发入门篇—— 关系数据库中的基本概念

    写在前面:关系数据库是目前应用最广泛的的数据库,了解关系型数据库的基本概念,有助于应用开发。

    1.关系数据库中基本概念

    关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系数据库中涉及的基本概念(码和键是同个意思,主码即主键)如下:
    关系(Relation):一个关系对应通常说的一张表
    元组(Tuple): 表中的一行即为一个元组
    属性(Attribute):  表中的一列即为一个属性,给每一个属性起一个名称即属性名
    候选码(Candidate key):若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。
     简单的情况:候选码只包含一个属性
    全码(All-key)最极端的情况下关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)。
    主码(Primary key):表中的某个属性组,它可以唯一确定一个元组。
    若一个关系有多个候选码,则选定其中一个为主码。
    外码(Foreign Key):概念见下面参照完整性里面。
    主属性(Prime attribute)候选码的诸属性称为主属性(Prime attribute)
    非主属性( Non-Prime attribute):不包含在任何侯选码中的属性称为非主属性( Non-Prime attribute)或非码属性(Non-key attribute) 
    域(Domain)
    属性的取值范围。
    分量元组中的一个属性值。
    关系模式对关系的描述,形式化的表示为:关系名(属性1,属性2,…,属性n)
                            例如,学生(学号,姓名,年龄,性别,系,年级)

    2.关系模型的三类完整性

    关系数据模型由关系数据结构、关系操作、关系中的完整性约束规则三个基本部分组成。重点了解三类完整性约束规则和关系上的操作。
    关系模型中有三类完整性约束:实体完整性、参照完整性和用户定义的完整性

    1)实体完整性

    实体完整性规则:若属性A是关系R的主属性,则A不能取空值。
    实体完整性规则规定,关系的主码中的属性(即主属性)不能取空值。空值(NULL)不是0,也不是空字符串,而是没有值。换言之,所谓空值就是“不知道”或“无意义”的值。由于主码是实体的惟一标识,如果主属性取空值,关系中就会存在某个不可标识的实体,即存在不可区分的实体,这与实体的定义矛盾,因此,这个规则称为实体完整性规则。
    注意:实体完整性规则规定基本关系的所有主键的各属性都不能取空值,而不仅是主键整体不能取空值。
    例如,选课(学号,课程号,成绩)关系中,属性组“学号”和“课程号”为主键,同时也是主属性,则这两个属性均不能取空值。

    2)参照完整性

    a.  外码和参照关系(重要概念)
    设F是基本关系R的一个或一组属性,但不是关系R的主码(或候选码)。如果F与基本关系S的主码KS相对应,则称F是基本关系R的外码(Foreign Key),并称基本关系R为参照关系(Referencing Relation),称基本关系S为被参照关系(Referenced  Relation)。
    例如,有教师授课关系模型如下:
    课程(课号,课名,学分)
    教师(工号,姓名,职称,课号
    参考书(书号,书名,课号
    其中,关系教师中的属性“课号”不是主码,该属性与关系课程中的主码“课号”相对应。
    因此,“课号”是关系教师的外码。关系教师是参照关系,关系课程是被参照关系。

    b.参照完整性规则
    参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码KS相对应,则对于R中的每个元组在F上的值必须满足:或者取空值(F的每个属性均为空值),或者等于S中某个元组的主码值。
    例如,在上述教师授课关系模型中,关系教师中的外码“课号”只能是下面两类值:
    (1) 空值。表示还未给该教师安排课。
    (2) 非空值,但此值必须为被参照关系课程中某一门课程的“课号”。
    在关系数据库中,表与表之间的联系是通过公共属性实现的。这个公共属性往往是一个表的主码,同时是另一个表的外码。
    注意:在实际应用中,外码不一定与对应的主码同名。

    3)用户定义完整性

    任何关系数据库系统都应该支持实体完整性和参照完整性。除此之外,关系数据库系统根据现实世界中应用环境的不同,往往还需要另外的约束条件。用户定义的完整性就是针对某一具体要求来定义的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。
    例如,某个属性必须取惟一值;某些属性之间应满足一定的函数关系;某个属性的取值范围在0—400之间等。关系模型应提供定义和检验这类完整性的机制,以便系统用统一的方法处理它们,而不需要由应用程序来承担这一功能。

    4)完整性约束规则的检查——如何在实际操作中执行完整性约束规则

    为了维护数据库中数据的完整性,在对关系数据库执行插入、删除和修改操作时,就要检查是否满足以上三类完整性规则。
    (1) 当执行插入操作时,首先检查实体完整性规则,插入行的主码属性上的值,是否已经存在。若不存在,可以执行插入操作;否则不可以执行插入操作。再检查参照完整性规则,如果是向被参照关系插入,不需要考虑参照完整性规则;如果是向参照关系插入,插入行在外码属性上的值是否已经在相应被参照关系的主码属性值中存在。若存在,可以执行插入操作;否则不可以执行插入操作,或将插入行在外码属性上的值改为空值后再执行插入操作(假定
    该外码允许取空值)。最后检查用户定义完整性规则,检查被插入的关系中是否定义了用户定义完整性规则,如果定义了,检查插入行在相应属性上的值是否符合用户定义完整性规则。若符合,可以执行插入操作;否则不可以执行插入操作。
    (2) 当执行删除操作时,一般只需要检查参照完整性规则。如果是删除被参照关系中的行,则应检查被删除行在主码属性上的值是否正在被相应的参照关系的外码引用,若没被引用,可以执行删除操作,若正在被引用,有三种可能的做法:不可以执行删除操作(拒绝删除),或将参照关系中相应行在外码属
    性上的值改为空值后再执行删除操作(空值删除),或将参照关系中相应行一起删除(级联删除)。
    (3)当执行修改操作时,因为修改操作可看成先执行删除操作,再执行插入操作,因此是上述两种情况的综合。

    3.关系模型上的操作

    关系数据库所使用的操作可以由抽象的关系代数和关系演算来表达,这部分内容涉及集合操作等简单数学问题,主要使用抽象符号来表示,能够脱离具体语言来表达查询、更新和控制等操作,对于理解数据库操作十分有用,在这里不做过多介绍,还是等到后面学习SQL语句时感受吧。

    4.参考资料

    (1)数据库原理及开发应用      清华大学出版社 周屹等编著
    (2)http://shujuku.zjwchc.com/
    展开全文
  • 关系数据库的功能

    千次阅读 2013-11-23 18:10:37
    关系数据库的功能 1、数据库定义 2、数据操作 3、数据库运行和控制 4、数据库建立与维护 5、数据字典 6、数据通信
  • 关系数据库与非关系数据库详细比较

    千次阅读 多人点赞 2018-11-12 11:06:02
    关系数据库与非关系数据库详细比较 ...3.非关系数据库中,我们查询一条数据,结果出来一个数组,关系数据库中,查询一条数据结果是一个对象。 区别 关系数据库 ...
  • 文章目录关系数据库关系操作基本关系操作关系数据库语言的分类关系模型的完整性实体完整性(Entity Integrity)参照完整性(Referential Integrity)用户定义完整性(User-defined Integrity)E-R图向关系模型的转换...
  • 一、选择题 ...关系数据库 D.非数据库 【答案:】C 3、SQL语言具有 的功能。  A.关系规范化、数据操纵、数据控制 B.数据定义、数据操纵、数据控制  C.数据定义、关系规范化、数据控...
  • 关系数据库与非关系数据库Nosql区别汇总

    千次阅读 多人点赞 2018-08-24 11:14:06
    目录 关系数据库与非关系数据库详细比较 关系数据库与非关系数据库优缺点对比 关于Nosql ...2.非关系数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的...
  • 数据库和关系数据库   数据库是指按照一定数据结构和模型来组织、 存储和管理数据的仓库。 采用 关系模型建立起来的数据库叫做关系数据库关系数据库是建立在集合代数基础 上, 应用数学方法来处理数据库的数据...
  • 数据库并发控制技术

    千次阅读 2018-08-25 14:27:19
    事务是一系列的数据库操作,是数据库应用程序的基本逻辑单元,也是恢复和并发控制的...例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。一般来说,一个程序包含多个事务。 ACID,是...
  • 在用户看来,关系模型数据的逻辑结构是一张扁平的二维表。 1.1域 域是一组具有相同数据类型值的集合。 1.2笛卡儿积 笛卡儿积是域上的一种集合运算。 定义:给定一组域D1,D2,...,Dn,允许其中某些域是...
  • 关系数据库——基础

    千次阅读 多人点赞 2019-10-21 16:51:34
    数据:数据库中存储的基本对象,描述一个事物的符号记录,数据和其语义不可分开说 数据库(DB):是长期储存在计算机内、有组织的、可共享的大量数据的集合。 数据库管理系统:一个管理数据的软件 主要功能: ...
  • 也许有人迷惑关系数据库和非关系数据库区别,其实非关系数据库就是Nosql,所谓Nosql,就是(Not Only SQL),这个问题等价于关系数据库和Nosql区别。 Nosql简介 Redis,Memchche,MongoDb的区别 1. 本质:...
  • 从关系型数据库到非关系数据库

    千次阅读 2016-07-16 21:54:15
    并发:关系数据库通过事务来控制对数据的访问,以便处理并发情况下数据的不一致。 集成:现在的应用开发多是一个团队共同开发,不用应用程序经常需要使用同一份数据。常用的办法就是使用共享数据库集成,多个
  • 数据库数据库中表等数据库对象的建立实验(包括关系图、完整性、权限控制、视图、索引等内容)实验1 SQL Server的安装安装过程展示实验2 设计数据库、创建数据库和数据表实验5 视图实验6 完整性约束实验7 权限管理...
  • Database:Database数据库的简介、类型及其区别(关系数据库VS非关系型数据库)、案例应用之详细攻略 目录 Database数据库的简介 1、数据库的发展历史:80年代以来的关系型数据库→基于分布式技术云计算和...
  • 数据库并发控制

    万次阅读 多人点赞 2010-10-05 11:34:00
     在数据库中为什么要并发控制? 答:数据库是共享资源,通常有许多个事务同时在运行。当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确...
  • 关系数据库和非关系数据库的区别

    千次阅读 多人点赞 2019-06-06 23:52:16
    而我们今天就来了解一下关系数据库与非关系数据库的区别。 关系数据库就是指那种采用了关系模型来组织数据的数据库。 各种表之间有各种各样的联系,从而组成的一个数据组织。 非关系数据库是指一般不遵循...
  • 关系数据库基础理论

    千次阅读 2018-08-06 11:02:06
    mysql系列之一关系数据库基础理论 正是数据库管理的需要催生了数据库管理系统DBMS,而关系型数据库管理系统为RDBMS 常见的数据模型有三种: - 层次模型 - 网状模型 - 关系模型 一、关系数据库的产生 在...
  • 关系数据库——sql基础1定义

    千次阅读 多人点赞 2019-10-21 17:07:09
    关系数据库标准语言SQL 基本概念 SQL语言是一个功能极强的关系数据库语言。同时也是一种介于关系代数与关系演算之间的结构化查询语言(Structured Query Language),其功能包括数据定义、数据查询、数据操纵和...
  • 实时数据库,内存数据库关系数据库比较

    万次阅读 多人点赞 2018-09-26 18:55:10
    内存数据库 内存数据库就是将数据放在内存直接操作的数据库,它利用内存的读写速度比磁盘快、内存是随机访问而磁盘是顺序访问这两个特点,将数据保存在内存,在内存模仿...关系数据库是建立在集合代数基础上...
  • 关系数据库标准语言SQL

    千次阅读 2017-12-07 23:55:17
    结构化查询语言(SQL)是关系数据库的标准语言,也是一个通用的、功能极强的关系数据语言。其功能不仅是查询,还包括数据库模式创建、数据库数据的插入与修改、数据库安全性完整性定义与控制等一系列功能。 1、SQL的...
  • 关系数据库(SQL):Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等; 非关系数据库(NoSQL):NoSql、Cloudant、MongoDb、redis...关系型数据存储方式是表格式的,因此存储在数据表的行和列...
  • SQL的表 与关系数据库

    千次阅读 多人点赞 2012-07-19 07:38:38
     出现在master数据库和侮个用户自定义的数据库中,它对基表或者视图的每个列和存储过程的侮个参数含有一行记录。 3 系统表Sysindexes  出现在master数据库和何个用户自定义的数据库中,它对
  • 关系数据库与NOSQL数据库的区别

    千次阅读 2014-01-02 11:12:24
    关系数据库与NOSQL数据库的区别
  • 数据库并发控制知识点总结

    千次阅读 2016-08-28 13:13:40
    刚看到一篇很不错的数据库并发控制知识点总结,包括一部分可能会出现在笔试面试的题目,适合对基础概念理解不透彻的我,就转载过来了。  原文地址:http://blog.csdn.net/xiangminjing/article/details/5922325...
  • PostgreSQL关系数据库

    千次阅读 2017-03-17 14:44:36
    关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库的数据。 现实世界的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型由关系数据结构、关系操作集合、...
  • 关系数据库的特点

    千次阅读 2013-09-16 00:10:34
    关系数据库的主要特征 1)数据集中控制,在文件管理方法,文件是分散的,每个用户或每种处理都有各自的文件,这些文件之间一般是没有联系的,因此,不能按照统一的方法来控制、维护和管理。而数据库则很好地...
  • 在介绍Mongo DB之前 为了更好的丰富知识架构的完整性,会对关系数据库做一个简单介绍。 关系数据库会按照集中式数据和分布式数据库分开总结,集中式数据库平时接触的比较多,所以主要介绍分布式关系数据库 1 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 498,257
精华内容 199,302
关键字:

关系数据库中控制