【数据库系统原理】第三章 SQL语言之表定义

3.1 表定义

3.1.1 SQL语言概览

简介:

  • SQL(Structured Query Language,结构化查询语言),SQL最早的版本
    是由IBM开发的,它最初叫做Sequel(Structured English QUEry
    Language),在20世纪70年代早期作为System R项目的一部分。

发展历史:

  • SQL-86:1986年ANSI和ISO发布了第一个SQL标准。
  • SQL-89:ANSI发布的一个SQL扩充版本。
  • SQL-92:目前大多数商业RDBMS支持此标准,支持SQL标准符合度的四个等级。
  • SQL-99:SQL-92的扩充版本,现在部分商业数据库系统支持此标准,支持SQL标准符合度的四个等级。

SQL的四个标准符合度等级:

  1. Entry level SQL(入门级)
  2. Transitional SQL (过渡级)
  3. Intermediate SQL(中间级)
  4. Full SQL(完全级)
  • 目前,没有DBMS产品全部实现了SQL标准符合度的四个等级。

SQL语言的组成部分:
① DDL (Data definition Language) 数据定义语言

如:

  • 表:create table,alter table,drop table
  • 索引:create index,drop index
  • 视图:create view,drop view
  • 触发器:create trigger,drop trigger

② DML (Data manipulation Language) 数据操纵语言

如:

  • 选择:select … from
  • 插入、删除、更新:insert, delete, update

③ DCL (Data-control Language) 数据控制语言

如:

  • 确认、取消:grant,revoke

3.1.2 SQL数据定义

使用数据定义语言(DDL)定义关系集合:

CREATE TABLE instructor( ID char(5), --定长字符串 name varchar(20) not null, --可变长字符串,完整性约束:不为空 dept_name varchar(20), salary numeric(8,2), --有两位有效数字的八位浮点数 primary key(ID)); --指定主键为ID 

SQL的DDL语言可用于定义每个关系的信息:

  • 每个关系模式。
  • 每个属性的取值类型。
  • 完整性约束。
  • 每个关系维护的索引集合。
  • 每个关系的安全性和权限信息。
  • 每个关系在磁盘上的物理存储结构。

基本类型:

类型 说明
char(n) 固定长度字符串,用户指定长度n。
varchar(n) 可变长度的字符串,用户指定最大长度。
int 整数类型(和机器相关的整数类型的子集),等价于全程integer。
smallint 小整数类型(和机器相关的整数类型的子集)。
numeric(p,d) 定点数,精度由用户指定。这个数有p位数字,其中d位数字在小数点右边。
real,double precision 浮点数与双精度浮点数,精度与机器相关。
float(n) 精度至少为n位的浮点数。
null 每种类型都可以包含一个特殊值,即空值。可以声明属性值不为空,禁止加入空值。
date 日期,含年、月、日,如 ‘2015-3-20’。
time 时间,含小时、分钟、秒,如‘ 08:15:30’或‘ 08:15:30.75’。
timestamp 日期 + 时间,如‘2015-3-20 08:15:30.75’。

SQL中各类数据库通用的函数举例:

函数 说明
abs() 绝对值
exp() 指数
round() 四舍五入

SQL支持的完整性约束举例:

约束 说明
not null 一个属性上的not null约束表明在该属性上不允许空值。
primary key(A1,…,Am) 声明表示属性A1, …, An构成关系的主码。主码属性必须非空且唯一。主码属性在SQL_92标准中无需指明 not null,但是在SQL_89中需要明确指明。
foreign key (A1, …, Am) references 声明表示关系中任意元组在属性上(A1, …, Am)上的取值必须对应于关系s中某元组的主码属性上的取值。
check(P) P是谓词条件

例如,声明ID为instructor的主码,并确保salary的值为非负:

/*方法一*/ CREATE TABLE instructor( ID char(5), name varchar(20) not null, dept_name varchar(20), salary numeric(8,2), primary key(ID), --声明ID为instructor的主码 check (salary>=0)); --条件:salary>=0 
/*方法二*/ CREATE TABLE instructor2( ID char(5) primary key, --直接声明主码 name varchar(20), dept_name varchar(20), salary numeric(8,2), check (salary>=0)); 

命令举例:

命令 说明 举例
drop table 从数据库中删除关于被去掉关系的所有信息。 DROP TABLE instructor2;
alter table 为已有关系增加属性。 ALTER TABLE instructor add birthday date;
alter table drop 从关系中去掉属性,很多数据库系统并不支持此操作 ALTER TABLE r DROP A
alter table modify 修改关系中的属性。 ALTER TABLE instructor MODIFY (ID char(10));

(完)