一、事务
1.1 事务的概念
- (从应用程序员角度)是一个存取或改变数据库内容的程序的一次执行,或者说一条或多条SQL语句的一次执行被看作一个事务
- 事务一般是由应用程序员提出,因此有开始和结束,结束前需要提交或撤销
begin transaction
exec sql ...
...
exec sql ...
exec sql commit work|exec sql rollback work
end transaction
- 在嵌入式SQL程序中,任何一条数据操纵语言(如exec sql select等)都会引发一个新事务的开始,只要该程序当前没有正在处理的事务。而事务的结束是需要应用程序员通过commit或rollback确认的。因此begin transaction和end transaction两行语句是不需要的
- (从微观角度,或者从DBMS角度)是数据库管理系统提供的控制数据操作的一种手段,通过这一手段,应用程序员将一系列的数据库操作组合在一起作为一个整体进行操作和控制,以便数据库管理系统能够提供一致性状态转换的保证
1.2 事务的特性
- ACID
- 原子性(Atomicity):DBMS能够保证事务的一组更新操作是原子不可分的,即对DB而言,要么全做,要么全不做
- 一致性(Consistency):DBMS保证事务的操作状态是正确的,符合一致性的操作规则,它是进一步由隔离性来保证的
- 隔离性(isolation):DBMS保证并发执行的多个事务之间互相不受影响。
- 持久性(Durability):DBMS保证已提交的事务的影响是持久的,被撤销的事务的影响是可恢复的
- 换句话说:具有ACID特性的若干数据库基本操作的组合体被称为事务
二、游标
2.1 处理单行数据和多行数据
- 单行结果处理和多行结果处理的差异(into子句和游标(cursor))
2.1.1 检索单行子句
exec sql select [all|distinct] expression [,expression]
into host-variable, [host-variable]
from tableref [corr_name] [, tableref [corr_name]...]
where search search_codition;
2.1.2 检索多行结果
- 检索多行结果,则需要使用游标(cursor)
- 游标是指向某检索记录集的指针
- 通过这个指针的移动,每次读一行,处理一行,再读一行...,直至处理完毕
- 游标(cursor)的使用
- 游标(cursor)的使用需要先定义,在打开(执行)、接着一条接着一条处理,最后在关闭
- 游标可以定义一次,多次打开(多次执行),多次关闭
delcare cursor
exec sql declare cursor_name cursor for
subquery
[order by result_column [asc|desc][. result_column...]
[for [read only|update[of columnname [,columnname...]]]]];
- cursor的打开和关闭:open cursor // close cursor
- cursor的数据读取:fetch
exec sql fetch cursor_name
into host-variable,[host-variable,...];
三、数据字典
3.1 数据字典的概念
- 数据字典,又称为系统目录
- 是系统维护的一些表或视图的集合,这些表或视图存储了数据库中各类对象的定义信息,这些对象包括create语句定义的表、列、索引、视图、权限、约束等,这些信息有称数据库的元数据--关于数据的数据
- 不同DBMS术语不一样:数据字典、目录表、系统目录、系统视图
- 不同DBMS中系统目录存储方式可能是不同的,但会有一些信息对DBA公开。这些公开的信息,DBA可以使用一些特殊的SQL命令来检索
3.2 数据字典的内容构成
- 数据字典通常存储的是数据库和表的元数据,即模式本身的信息
- 与关系相关的信息
- 关系名字
- 每一个关系的属性名及其类型
- 视图的名字及其定义
- 完整性约束
- 用户与账户信息,包括密码
- 统计与描述性数据:如每个关系中元组的数目
- 物理文件组织信息:
- 关系是如何存储的(顺序/无序/散列等)
- 关系的物理位置
- 索引相关信息
3.3 数据字典的表结构
- 数据字典的结构
- 也是存储在磁盘上的关系
- 专为内存高效访问设计的特定的数据结构