第五章、SQL语言
5.1、SQL简介(识记)
1、SQL数据库的体系结构 SQL 基本上也是三级结构
关系模式=基本表, 存储模式=存储文件, 子模式=视图 元组=行 属性=列 体系结构要点:
(1)SQL模式是表和约束的集合
(2)表由行集合构成,一行是列的序列,每列对应一个数据项 (3)表有三种:基本表,视图,导出表
(4)一个基本表可以跨一个或多个存储文件,一个存储文件也可以存放多个基本表 (5)用户可以用SQL语句对基本表和视图进行查询等操作 (6)SQL用户可以是应用程序,也可以是终端用户 2、SQL的组成 核心四部分:
(1)数据定义语言=SQL/DDL(定义SQ模式,基本表,视图和索引等结构) (2)数据操纵语言 SQL/DML(数据的查询和更新)
(3)嵌入式SQL 语言的使用规定(嵌入在主程序中使用)
(4)数据控制语言 SQL/DCL (对一个表或视图的授权,完整性规则的描述,事务控制)
3、SQL的特点
(1)强大的查询功能,select 可进行相当复杂的操作
(2)SQL不是一个应用开发语言,只提供数据库的操作功能
(3)SQL是国际标准语言,有利于个数据库之间交换数据,有利于程序的移植,有利于实现高度的数据独立性,有利于实现标准化
(4)SQL的词汇不多,核心功能只用了9个单词,接近英语语法,容易学习使用
5.2、SQL的数据定义(综合应用)
创建模式: create schema 模式名 authororization 用户名 删除模式: drop schema 模式名
复习SQL语句
完整性约束:主键子句(primary key),外键子句(foreign key),检查子句(check)
5.6、嵌入式SQL(领会)
1、嵌入式SQL的实现方法
(1)SQL语言有两种使用方法:
终端交互方式下使用(交互式SQL);
嵌入在主语言的程序中使用(嵌入式SQL)
(2)嵌入SQL的实现,两种处理方式:
扩充主语言的编译程序,使之能处理SQL语句 采用预处理方式,目前多采用此方式 预处理方式:
预处理程序对源程序进行扫描,识别出SQL语句并处理成函数的调用形式
再用主语言的编译程序编译成目标程序
(3)SQL2规定,SQL_STATE 是一个特殊的共享变量,起着解释SQL语句执行状况的作用,它是一个由5个字符组成的字符数组
2、嵌入式SQL的使用规定 (1)嵌入式SQL 语句格式:
Exec SQL SQL语句 End_Exec
结束标志在C和pascal 中用 ; 表示
(2)允许嵌入SQL语句用主语言的程序变量 (称为共享变量)
引用时,这些变量前要加 : 作为前缀标识 以示与数据库中变量有所区别 这些变量要用SQL的 declaer 语句说明 Exec sql begin declear section
Char sno[5],name[9]; Char SQL_state[6]; exec sql end declear section; (3)游标:
由于SQL语句处理的是记录集合,而主语言一次只能处理一个记录,因此需要游标机制,把集合操作转换成单记录处理方式
游标定义语句:exec sql declear 游标名 cursor for
Select 语句
End exec
游标语句是一个说明语句,其中的select 并不立即执行
游标打开语句:exex sql open 游标名 end_exec
该语句执行游标中的sql 语句,同时游标处于活动状态。 游标是一个指针,此时指向查询结果的第一行。
游标推进语句:exec sql fetch from 游标名 into 变量表 end_exec
此时游标推进一行,并把游标指向行(当前行)中的值取出,送到共享变量,变量表是用逗号分开的共享变量组成。
Fetch语句常置于主语言的循环结构中,并借助主语言的处理语句逐一查询结果中的一个元组。
游标关闭语句:exec sql close 游标名 end_exec
关闭的游标可以再次打开,与新的查询结果相联系 游标处于活动状态时,可以删除更改游标指向的元组
3、嵌入式SQL的使用
(1)不涉及游标的SQL DML 语句
P142 实例
(2)涉及游标的SQL DML 语句(P143 实例)
Select 语句的使用范式:当select查询结果为多个元组时,一定要用游标机制吧多个元组一次一个的传给主程序语言处理,步骤:
先用游标定义语句定义一个游标与某个select语句对应。
游标用open打开后处于活跃状态,此时游标指向第一个元组之前。
每执行一次fetch 语句,游标指向下一个元组,并把数值送到共享变量。 最后用close关闭游标。 (3)卷游标的定义和推进
游标在推进时只能沿查询结果中元组顺序从头到尾一行一行的推进,并不能向上推进,因此出现了卷游标。 语法:
Exec sql declear 游标名 scroll cursor for
Select 语句 End_exec 推进方式:
P145
4、动态SQL语句
(1)动态SQL预备语句(不执行,只声明)
Exec sql prepare 动态SQL语句名 from 共享变量或字符串
(2)动态SQL 执行语句(P146实例) Exec sql execute 动态SQL语句名 两点改进:
当预备语句中组合而成的SQL语句只需要执行一次,那么预备语句呵呵性语句可合成一句
exec sql execute immediate 共享变量或字符串
当预备语句中组合而成的SQL语句的条件值尚缺时,可在执行语句中用 using 补上
Exec sql execute 动态SQL语句名 using 共享变量
5.7存储过程与SQL/PSM(识记)
减少局限性的方法之一:使用SQL标准的存储过程和SQL/PSM(持久存储模块)技术
1、数据库存储过程与函数
数据库中的程序(代码)是以数据库对象的形式存储在数据库中,因此称为存储过程 定义:存储过程使用SQL语句和流程控制语句编写的模块,存储过程经过编译优化后存储 在数据库服务器端的数据库中,使用时即可调用。 存储过程优点:
(1)提高运行速度
(2)增强了SQL的功能和灵活性
(3)可以降低网络的通信量 (4)减轻了程序编写的程序量 (5)间接实现安全控制功能 声明:
P147 书上讲的不详细 2、SQL/PSM(P148) (1)顺序执行 (2)条件分支语句 (3)循环语句
第六章、数据库管理
对数据库的管理主要通过四个方面实现:数据库的恢复、并发控制、完整性控制、安全性控制。
6.1事务(领会)
1、事务的定义
定义:事务是构成单一逻辑工作单元的操作集合,要么完整的执行,要么不执行。不论发生 任何情况,DBS必须保证事务能正确完整的执行
(1)事务以 begin transaction 开始 ,以 commit 、rollback 结束 (2)Commit 表示事务成功的执行(提交),rollback表示事务执行不成功的结束(回退撤销)
(3)对数据库的访问是建立在读和写操作上的:
read(x):从磁盘数据库中读到内存缓冲区中 write(y):从内存缓冲区中,写会磁盘的数据库
2、事务的ACIS性质
(1)原子性:一个事务对数据库的所有操作,是一个不可分割的单元,要么全执行,要么全不执行。由DBMS事务管理子系统来实现
(2)一致性:一个事务独立执行的结果,应保持数据库的一致性,数据不会因为事务的执行而遭破坏。由DBMS完整性子系统执行测试任务。
(3)隔离性:多个事务并发执行,系统应保证这些事务先后单独执行的结果一样。由DBMS并发控制子系统实现的。
(4)持久性:一旦事务完成全部操作,它对数据库的所有更新应持久性的反应在数据库中。由DBMS的恢复管理子系统实现。
6.2、数据库的恢复(领会)
定义:系统能把数据库从被破坏、不正确的状态,恢复到最近的一个正确的状态,DBMS的这种能力称为数据库的可恢复性(recovery)
1、典型的恢复策略
(1)平时做好两件事:转储和建立日志 (2)一旦发生数据库故障,分两种情况处理
(1)物理破坏:此时数据库已经不可用,就必须装入最近一次拷贝的数据库备份到新的磁盘,然后利用日志库进行REDO 已提交的事务
(2)非物理破坏:利用日志库 UNDO 所有不可靠的修改,再利用日志库执行 REDO 。
2、故障类型和恢复方法 (1)事务故障
(1)可以预期的事务故障:事务代码中加入 rollback 执行 undo 操作 (2)非预期的事务故障: 由系统直接对该事务执行undo 操作 (2)系统故障
(1)对未完成事务做undo处理
(2)对已提交但更新还留在缓冲区的事务做redo处理 (3)介质故障
此项故障为毁灭性故障,此时恢复过程如下:
(1)重装最近转储的后备副本到新的磁盘,是数据库恢复到转储时的一致性 (2)在日志中找出最近转储以后提交的事务
(3)将这些事务进行redo 处理,讲数据库恢复到故障前的某一时刻的一直状态 事务故障和系统故障的恢复由系统自动进行,而介质故障需要DBA的配合进行,介质故障通常称为硬故障,其他两个为软故障
3、检查点技术
REDO和UNDO 采用了此技术 (1)检查点方法
P156
(2)检查点方法的恢复算法
(1)根据日志文件建立事务重做队列和事务撤销队列
(2)对重做队列中的事务进行REDO处理,对撤掉队列中的事务进行UNDO处理
进行UNDO处理的方法是:反向扫描日志文件,根据撤销队列的记录对没一个撤销事务的更新操作执行逆操作
6.3数据库的并发控制(领会)
1、并发操作带来的3个问题 (1)丢失更新问题 (2)读脏数据问题 (3)不可重复问题 2、封锁技术
定义:锁:锁是一个与数据项相关的变量,对可能应用于该数据项上的操作而言,锁描述了该数据项的状态。锁分排他型锁(X锁)&共享型锁(S锁)
(1)X锁
定义:某事务对某数据加了X锁,在解除X前不允许其他事务对其加任和锁
申请:XFIND R 表示事务对数据R 申请加X锁 解除X锁: Xrelease R