数据库系统概念——SQL
SQL查询语言概览
SQL语言有以下几个部分:
- 数据定义语言(Data-Definition Language, DDL):SQL DDL提供定义关系模式、删除关系以及修改关系模式的命令。
- 数据操纵语言(Data-Manipulation Language, DML):SQL DML提供从数据库中查询信息,以及在数据库中插入元组、删除元组、修改元组的能力。
- 完整性(integrity):SQL DDL包括定义完整性约束的命令,保存在数据库中的数据必须满足所定义的完整性约束。破坏完整性约束的更新是不允许的。
- 视图定义(view definition):SQL DDL包括定义视图的命令。
- 事务控制(transaction control):SQL包括定义事务的开始和结束的命令。
- 嵌入式SQL和动态SQL(embedded SQL and dynamic SQL):嵌入式和动态SQL定义SQL语句如何嵌入到通信编程语言,如C、C++和Java中。
- 授权(authorization):SQL DDL包括定义对关系和视图的访问权限的命令。
SQL数据定义
数据库中的关系集合必须由数据定义语言(DDL)指定给系统。
SQL的DDL不仅能够定义一组关系,还能够定义每个关系的信息,包括:
每个关系的模式。
每个属性的取值类型。
完整性约束。
每个关系维护的索引集合。
每个关系的安全性和权限信息。
每个关系在磁盘上的物理存储结构。
基本类型
SQL标准支持多种固有类型,包括:
- char(n) 固定长度字符串,用户指定长度n。也可以使用全称 character。
- varchar(n) 变化长度字符串,用户指定最大成对n,等价于全称 character varying。
- int 整数类型(和机器相关的整数的有限子集),等价于全称 integer。
- smallint 小整数类型(和机器相关的整数类型的子集)。
- numeric(p,d) 定点数,精度由用户指定。p位数字,其中d位在小数点右边。
- real, double precision 浮点数与双精度浮点数,精度与机器相关。
- float(n) 精度至少为n位的浮点数。
每种类型可包含一个被称作空值的特殊值。
基本模式定义
用 create table 命令定义SQL关系。
create table department
(dept_name varchar (20),
building varchar (15),
budget numeric (12,2),
primary key (dept_name));
create table 命令的通用形式是:
create table r
(A1 D1,
A2 D2,
. . . ,
An Dn,
<完整性约束1>,
. . . ,
<完整性约束k>);
SQL支持许多不同的完整性约束:
-
p r i m a r y k e y ( A j 1 , A j 2 , . . . , A j m ) primarykey(A_{j1},A_{j2},...,A_{jm}) primarykey(Aj1,Aj2,...,Ajm)
表示属性 A j 1 , A j 2 , . . . , A j m A_{j1},A_{j2},...,A_{jm} Aj1,Aj2,...,Ajm构成关系的主码。
主码属性必须非空且唯一。
主码的声明是可选的。 -
f o r e i g n k e y ( A j 1 , A j 2 , . . . , A j m ) r e f e r e n c e s foreignkey (A_{j1},A_{j2},...,A_{jm}) references foreignkey(Aj1,Aj2,...,Ajm)references
foreign key声明表示关系中任意元组在属性 A j 1 , A j 2 , . . . , A j m A_{j1},A_{j2},...,A_{jm} Aj1,Aj2,...,A