整理自中国人民大学的慕课《数据库系统概论》,课程链接如下
https://www.icourse163.org/course/RUC-1001655006?from=searchPage
SQL语言
没有一个数据库系统能够支持SQL标准的所有概念和特性
SQL的特点
综合统一
- 集数据定义语言DDL 、数据操纵语言DML、数据控制语言DCL功能于一体
- 可以独立完成数据库生命周期中的全部活动
- 定义和修改、删除关系模式,定义和删除视图,插入数据,建立数据库
- 对数据库中的数据进行查询和更新
- 数据库重构和维护
- 数据库安全性、完整性控制,以及事物控制
- 嵌入式SQL和动态SQL定义
SQL 高度非过程化
- 存取路径的选择以及SQL的操作过程由系统自动完成
面向集合的操作方式
-
操作对象、查找结果可以是元组的集合
-
一次插入、删除、更新操作的对象可以是元组的集合
语言简洁,易学易用
SQL功能 | 动词 |
---|---|
数据查询 | SELECT |
数据定义 | CREATE, DROP, ALTER |
数据操纵 | INSERT, UPDATE, DELETE |
数据控制 | GRANT, REVOKE |
SQL的基本概念
SQL支持关系数据库的三级模式结构
- 引入视图的概念(定义在基本表上的虚表),从而建立起外模式——模式之间的层次。
- 基本表和存储文件是独立的,并非一一对应关系。
基本表
- SQL中的一个关系对应一个基本表
- 一个(或多个)基本表对应一个存储文件
- 一个表可以带若干索引
存储文件
- 逻辑结构组成了关系数据库的内模式
- 物理结构对用户是隐蔽的
数据定义
操作对象 | 操作方式 | ||
---|---|---|---|
创建 | 删除 | 修改 | |
模式 | CREATE SCHEMA | DROP SCHEMA | |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
视图 | CREATE VIEW | DROP VIEW | |
索引 | CREATE INDEX | DROP INDEX | ALTER INDEX |
数据字典
- 数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有对象的定义信息以及一些统计信息
- 关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息
定义模式
- 定义模式实际上定义了一个目录
- 在这个目录中可以定义该模式包含的数据库对象,例如基本表、视图、索引等
- 在CREATE SCHEMA 中可以接受CREATE TABLE, CREATE VIEW 和GRANT 字句
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]
--为用户WANG定义一个学生-课程模式S-T
CREATE SCHEMA "S-T" AUTHORIZATION WANG;
--<模式名>缺省,隐含为<用户名>
CREATE SCHEMA AUTHORIZATION WANG;
删除模式
- CASCADE(级联):删除模式的同时把该模式中所有的数据库对象全部删除
- RESTRICT (限制) :如果该模式中定义了下级的数据库对象(如表、视图等),则拒绝该删除语句的执行;仅仅当该模式中没有任何下级的对象时才能执行删除操作
DROP SCHEMA <模式名> <CASCAD|RESTRICT>
定义基本表
- 列级完整性约束条件:涉及相应属性列
- 表级完整性约束条件:涉及一个或多个属性列,如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上
CREATE TABLE <表名>
(<列名><数据类型>[<列级完整性约束条件>]
[,<列名><数据类型>[<列级完整性约束条件>]
...
[,<表级完整性约束条件>];
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY(Cpno) REFERENCES Course(Cno)
);
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno, Cno),
FOREIGN KEY(Sno) REFERENCE Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
);
- 定义基本表模式的方式
- 在表名中明显的给出模式名 :CREATE TABLE “S-T”.SC(…) ;
- 在创建模式的同时创建表
- 设置所属的模式:SET search_path TO “S-T”, PUBLIC ;
修改基本表
- <表名>是要修改的基本表
- ADD 子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件
- DROP COLUMN 子句用于删除表中的列
1.如果指定了CASCADE短语,则自动删除引用了该列的其他对象
2.如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删除该列 - DROP CONSTRAINT 子句用于删除指定的完整性约束条件
- ALTER COLUMN 子句用于修改原有的列定义,包括修改列名和数据类型
ALTER TABLE<表名>
[ADD [COLUMN] <新列名> <数据类型> [完整性约束]]
[ADD <表级完整性约束>]
[DROP [COLUMN] <列名> [CASCADE|RESTRICT]]
[DROP CONSTRAINT <完整性约束名> [RESTRICT|CASCADE]
[ALTER COLUMN <列名> <数据类型>];
--增加入学时间列
ALTER TABLE Student ADD S_entrance DATE;
--将年龄的数据类型改为整数型
ALTER TABLE Student ALTER COLUMN Sage INT;
--增加课程名称必须取唯一值的约束条件
ALTER TABLE Course ADD UNIQUE(Cname);
删除基本表
DROP TABLE <表名> [RESTRICT|CASCADE]
RESTRICT : 要删除的基本表不能被其他表的约束所引用,如果存在依赖该表的对象,则此表不能被删除
CASCADE :删除该表没有限制,在删除基本表的同时,相关的依赖对象一起删除
索引的定义
- 为了 加快查询速度
- 常见索引:B+树索引*;散列索引*&