概览
SQL最早版本是有IBM开发,最初叫Sequel,在20世纪70年代早期作为System R 项目的一部分.
SQL语言有以下几个部分:
-
数据定义语言(data-definition Language,DDL):sql DDL 提供定义关系模式,删除关系以及修改关系模式的命令.
-
数据操纵语言(DML):sql DML 提供从数据库中查询信息,以及在数据库中插入元祖,删除元祖,修改元祖的能力.
-
完整性(integrity):sql DDL 包括定义完整性约束的命令,保存在数据库中的数据必须满足所有的完整性,不满足的更新是不被允许的.
-
视图定义:DDL 包括定义视图的命令.
-
事务控制:SQL 包括事务的开始和结束的命令.
-
嵌入式SQL和动态SQL:定义SQL语句如何嵌入到通用编程语言中,如,java
-
授权:DDL包括定义对关系和视图的访问权限的命令
SQL数据定义
可以定义:
- 每个关系的模式
- 每个属性的取值类型
- 完整性约束
- 每个关系维护的索引集合
- 每个关系的安全性和权限信息
- 每个关系在磁盘上的物理存储结构
基本类型
数据类型 | 定义 | 全称 |
---|---|---|
char | 固定长度的字符串,用户指定长度n | character |
varchar | 可变长度的字符串,用户指定最大长度n | character varying |
int | 整数类型(和机器相关的整数的有限子集) | integer |
smallint | 小整数类型(和机器相关的整数类型的有限子集) | |
numeric | 定点数,精度由用户指定. | |
real/double precision | 浮点数和双精度浮点数,精度和机器相关 | |
float | 精度至少为n位的浮点数 |
每个类型都可能包含一个被称作空值的特殊值.空值表示一个缺失的值,在可能的情况下,我们希望禁止加入空值.
char类型,如果字符串没有达到用户指定的长度,则在字符串后面添加空格以满足指定长度.
我们建议始终使用varchar类型而不是char类型.
基本模式定义
使用craete tabke 命令来定义SQL关系.通用的形式是:
create table r(
A1 D1,
A2 D2,
A3 D3,
A4 D4,
<完整性约束>,
......,
<完整性约束>
)
r是表名
A是指关系r模式中的一个属性名
D是A的域
D指定了A得类型以及可选的约束,用于限制所允许的A取值的集合.
create table 使用分号结束.
完整性约束
- primary key(A,A1,A2…):primary key 声明属性A,A1,A2…构成了关系的主码.主码属性必须非空且唯一
- foreign key(A,A1,A2,A3…) references :声明表示关系中任意元祖在属性(A1,A2,A3,)上的取值必须对应于关系S中某元祖在主码键上的取值.
- not null:约束属性不能为空.
例子:
create table department(
dept_name varchar(20),
building varchar(15),
primary key(dept_name)
);
create table course(
course_id varchar(7),
title varchar(50),
dept_name varchar(20),
foreign key (dept_name) references department;
)