1.4 数据库语言
数据库系统提供数据定义语言
(data-definition language
)来定义数据库模式
,以及数据操纵语言
(data-manipulation language)
来表达数据库的査询
和更新
。而实际上,数据定义和数据操纵语言并不是两种分离的语言,相反地,它们简单地构成了单一的数据库语言(如广泛使用的SQL
语言)的不同部分。
1.4.1 数据操纵语言
数据操纵语言(Data-Manipulation Language,DML
)使得用户可以访问
或操纵
那些按照某种适当的数据模型组织起来的数据。有以下访问类型:
- 对存储在数据库中的信息进行检索。
- 向数据库中插入新的信息。
- 从数据库中删除信息。
- 修改数据库中存储的信息。
数据操纵语言分类
通常有两类基本的数据操纵语言:
- 过程化
DML(procedural DML)
要求用户指定需要什么数据以及如何获得这些数据。 - 声明式
DML(declarative DML)
(也称为非过程化DML)
只要求用户指定需要什么数据,而不指明如何获得这些数据。
通常声明式DML
比过程化DML
易学易用。但是,由于用户不必指明如何获得数据,数据库系统必须找出一种访问数据的高效途径
查询
查询(query
)是要求对信息进行检索的语句。DML
中涉及信息检索的部分称作查询语言query language
。实践中常把查询语言
和数据操纵语言
作为同义词使用,尽管从技术上来说这并不正确.
1.4.2 数据定义语言
数据库模式
是通过一系列定义来说明的,这些定义由一种称作数据定义语言
(Data-DefinitionLanguage,DDL
)的特殊语言来表达。DDL
也可用于定义数据的其他特征。
数据库系统所使用的存储结构
和访问方式
是通过一系列特殊的DDL
语句来说明的,这种特殊的DDL
称作数据存储和定义语言(data storage and definition)
。这些语句定义了数据库模式的实现细节,而这些细节对用户来说通常是不可见的。
约束
存储在数据库中的数据值必须满足某些一致性约束( consistency constraint)
。例如,假设大学要求个系的账户余额必须不能为负值。DDL
语言提供了指定这种约束的工具。每当数据库被更新时,数据库系统都会检查这些约束。通常,约束可以是关于数据库的任意谓词。然而,如果要测试任意谓词,可能代价比较高。因此,数据库系统实现可以以最小代价测试的完整性约束
有哪些约束
- 域约束(
domain constraint
)。每个属性都必须对应于一个所有可能的取值构成的域(例如,整数型、字符型、日期/时间型)。声明一种属性属于某种具体的域就相当于约束它可以取的值。域约束是完整性约束的最基本形式。每当有新数据项插入到数据库中,系统就能方便地进行域约束检测。 - 参照完整性约束(
referential integrity
)。我们常常希望,一个关系中给定属性集上的取值也在另一关系的某一属性集的取值中出现(参照完整性)。例如,每门课程所列出的系必须是实际存在的系。更准确地说,一个course
记录中的dept_name
值必须出现在department
关系中的某个记录的dept_name
属性中。数据库的修改会导致参照完整性的破坏。当参照完整性约束被违反时,通常的处理是拒绝执行导致完整性被破坏的操作。 - 断言(
assertion)
。一个断言就是数据库需要时刻满足的某一条件。域约束
和参照完整性约束
是断言的特殊形式。然而,还有许多约束不能仅用这几种特殊形式表达。例如,”每一学期每个系必须至少开设5门课程”,必须表达成一个断言。断言创建以后,系统会检测其有效性。如果断言有效,则以后只有不破坏断言的数据库更新才被允许。 - 授权(
authorization)
。我们也许想对用户加以区别,对于不同的用户在数据库中的不同数据值上允许不同的访问类型。这些区别以授权来表达,最常见的是:- 读权限(
read authorization)
,允许读取数据,但不能修改数据; - 插入权限(
insert authorization)
,允许插入新数据,但不允许修改已有数据; - 更新权限(
update authorization)
,允许修改,但不能删除数据; - 删除权限(
deleteauthorization)
,允许删除数据。
我们可以赋予用户所有的权限,或者没有或部分拥有这些权限。
- 读权限(
数据字典介绍
正如其他任何程序设计语言一样,数据定义语言(DDL
)以一些指令(语句)作为输入,生成一些输出。DDL
的输出
放在数据字典(data dictionary
)中,数据字典包含了元数据(metadata
),元数据是关于数据的数据。
可把数据字典看作一种特殊的表,这种表只能由数据库系统本身(不是常规的用户)来访问和修改。在读取和修改实际的数据前,数据库系统先要参考数据字典。
原文链接: 1.4 数据库语言