4.关系数据库SQL语言简介
SQL:
功能:数据查询、数据操纵、数据定义、数据控制
特点:综合统一、高度非过程化、面向集合的操作方式、两种使用方式(终端输入SQL+SQL嵌入到高级程序语言中)、语言简洁且易学易用
支持三级模式结构:视图对应外模式、基本表对应模式、存储文件对应内模式
基本组成:数据定义语言、交互式数据操纵语言、事务控制、嵌入式SQL和动态SQL、完整性、权限管理
基本表和视图:都是表
基本表是实际存储在数据库中的表,
视图是虚表,是从基本表或其他视图中导出的表。数据库中只存放视图的定义,而不存放视图的数据
在用户看来,视图和基本表一样,都是关系(表)
索引:
分类:聚集索引(索引表中索引项的顺序与表中记录的物理顺序一致的索引)、非聚集索引
优点:
1.创建唯一索引,可以保证数据记录的唯一性
2.可以大大加快数据检索速度
3.可以加速表与表之家的连接,在实现数据的参照完整性方面有特别的意义
4.使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组和排序的时间
5.使用索引可以在检索数据过程中使用优化隐藏器,提高系统性能
视图:从一个或多个基本表或视图中导出的表,其结构和数据是建立在对表查询基础上的。
优点:
1.集中数据,简化和定制不同数据对数据库的不同数据要求
2.屏蔽数据的复杂性。用户不必了解数据库的结构,就可以方便地使用、管理数据,简化数据权限管理、重新组织数据以便输出到其他应用程序中
3.使用户只关心他感兴趣的某些特定数据和他们所负责的特定任务。而那些不需要的、无用的数据则不在视图中显示
4.大大简化了用户对数据的操作
5.让不同用户以不同的方式看到不同、相同的数据集
6.某些情况下,表数据量太大,在表设计时常将表进行水平、垂直分割,但表的结构的变化对应用程序产生不良影响
7.提供了一个简单、有效的安全机制
创建:
1.子查询可以是任意复杂的select语句,但通常不允许含有order by子句和distinct短句
2.with check option表示对update,insert,delete操作时保证更新、插入、删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)
3.组成试图的属性列明或全部省略或全部指定。如果省略属性列明,则隐含该视图由select子查询目标列的主属性组成
数据定义:创建表、修改表、删除表、索引建立与删除、视图创建与删除
数据操纵:查询、插入、删除、修改
数据查询:简单查询、连接查询、子查询与聚集查询、分组查询、更名运算、字符串操作、视图查询
数据更新:插入、删除、修改
访问控制:是控制用户对数据的存储权利,由DBA来决定的,DBMS来实现的
包括:delete,insert,select(=read),update,references(限制用户在创建关系时定义外码的能力)权限
DBMS数据控制功能:
1.通过GRANT和REVOKE将授权通知系统,并存入数据字典
2.当用户提出请求时,根据授权情况检查是否执行操作请求
嵌入式SQL:将SQL语句嵌入到某种高级语言中
关键问题:区分主语言中嵌入的SQL语句,以及主语言和SQL间的通信问题(在所有sql语句前加前缀 exec sql,SQL的结束标志随主语言的不同而不同)
嵌入式SQL与主语言之间的通信方式:
1.SQL通信区(SQLCA),向主语言传递SQL语句执行的状态信息,使主语言能够根据此信息控制程序流程
2.主变量,即共享变量,主语句向SQL语句提供参数主要通过主变量,主变量由主语言的程序定义,并用SQL的DECLARE语句说明。引用时,为了与SQL属性名相区别,须在主变量前加“:”
3.游标SQL语言是面向集合的,一条SQL语句可产生或处理多条记录。而主语言是面向记录的,一组主变量一次只能放一条记录。
所以,引入游标,可以通过游标指针来决定获得哪一条记录
示例:
?
5.关系数据库规范化
关系数据库:
设计理论的核心:数据间的函数依赖
衡量的标准:关系规范化的程度,分解的无损连接,保持函数的依赖性。
数据依赖:通过一个关系中属性间值的相等与否来体现出来的数据间的相互关系。是现实世界属性间联系和约束的抽象,是数据内在的性质,是语义的体现。
函数依赖:一种最重要的、最基本的数据依赖。
相关概念:函数依赖、非平凡的函数依赖、平凡的函数依赖、完全函数依赖、部分函数依赖(局部函数依赖)、传递依赖、码-候选码-主码、主属性-非主属性、外码、函数依赖的公理系统(Armstrong公理系统:自反律,增广律,传递律,合并规则、伪传规则、分解规则)
规范化:
1.1NF(第一范式):每一个分量不可再分的数据项
2.2NF(第二范式):INF+每个非主属性完全依赖于码(消除了非主属性对码的部分函数依赖)
3.3NF(第三范式):2NF+R(U,F)中,不存在码X,属性组Y,非主属性Z(Y不包含Z),使X→Y(不能反推),Y→Z成立(消除非主属性对码的传递函数依赖)
模式分解及分解应具有的特性:分解、无损连接、保持函数依赖
6.数据库的控制功能
事务:一个操作序列,“要么都做,要么都不做”,是数据环境中不可分割的逻辑工作单位。
一个程序可包含多个事务
定义:begin transaction(事务开始)、commit(事务提交)、rollback(事务回滚)
ACID性质:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)
数据库的备份与恢复:
故障类型:事务内部故障、系统故障(软故障)、介质故障(硬故障)、计算机病毒
数据恢复的基本原理:建立数据冗余(重复存储)。建立冗余数据的方法:进行数据转储和登记日志文件
数据转储分类/备份方法:静态转储和动态转储;海量转储与增量转储;日志文件;
恢复:
1.反向扫描日志文件,查找该事务的更新操作。
2.对事务的更新操作执行逆操作
3.继续反向扫描日志文件,查找该事务的其他操作,并做同样的处理,直到事务的开始操作
4.数据库镜像,通过复制数据实现。避免磁盘介质出现故障,影响数据库的可用性。缺点:频繁复制影响系统运行效果。实际应用:对关键数据、日志文件镜像
并发控制:控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,比main用户得到不正确的数据
并发操作带来的问题:数据的不一致性,主要有三类:丢失修改、不可重复读,读脏数据
并发控制技术:封锁(排他锁:写锁,X锁;共享锁:读锁,S锁);三级封锁协议(一级封锁协议、二级封锁协议、三级封锁协议)
活锁与死锁
并发调度的可串行性:固定次序执行,可给定一个并发调度
两段封锁协议:获得封锁;释放封锁
封锁的粒度:封锁对象(逻辑单元、物理单元)的大小。