《数据库系统概论》 -- 3.1 SQL概论和DDL
3.1 SQL特点
综合统一
集数据定义语言、数据操纵语言、数据控制语言的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动
关系模型中实体和实体间的联系均用关系表示,数据结构的单一性带来了数据操作符的统一性
高度非过程化
存取路径的选择以及SQL的操作过程由系统自动完成,提高了数据独立性
面向集合的操作方式
relation-at-a-time
以同一种语法结构提供多种使用方式
独立的语言:可以直接命令行键入SQL命令操作
嵌入式语言:也可以嵌入到高级语言(C、C++、JAVA)程序中
语言简洁,易学易用
核心功能只用9个动词
SQL功能 动词
数据查询 SELECT
数据定义 CREATE, DROP, ALTER
数据操纵 INSERT, UPDATE, DELETE
数据控制 GRANT, REVOKE
3.2 SQL基本概念
基本表:本身独立存在的表,一个关系对应一个基本表,一个或多个基本表对应一个存储文件
索引:一个表可以带若干索引,索引也存放在存储文件中
视图:从一个或几个基本表到处的表,数据库中存放视图的定义而不存放视图对应的数据
3.3 数据定义
操作对象 操作方式
创建 删除 修改
模式 CREATE SCHEMA DROP SCHEMA
表 CREATE TABLE DROP TABLE ALTER TABLE
视图 CREATE VIEW DROP VIEW
索引 CREATE INDEX DROP INDEX ALTER INDEX
模式创建
格式 CREATE SCHEMA [<模式名>] AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>]
说明 创建模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象;
<模式名>省略时缺省与<用户名>保持一致;
可以在创建模式同时创建表、视图,或授权
举例 为用户WANG定义一个学生-课程模式S-T
CREATE SCHEMA S-T AUTHORIZATION WANG;
为用户ZHANG创建一个TEST模式,并在其中定义一个表TAB1
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1(COL1 SMALLLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);
注:附录--01.schema和database的区别
模式删除
格式 DROP SCHEMA <模式名> <CASCADE|RESTRICT>;
说明 CASCADE:级联,在删除模式时,删除该模式中的所有数据库对象
RESTRICT:限制,在删除模式时,如果模式中已经定义了数据库对象,则拒绝该删除语句的执行
举例 级联删除TEST模式
DROP SCHEMA TEST CASCADE;
基本表创建
格式 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) NOT NULL,
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);
注:附录--02.数据类型、03.模式与表
修改基本表
格式 ALTER TABLE <表名>
[RENAME <新表名>]
[ADD [COLUMN] <新列名> <新数据类型> [<新列级完整性约束>]]
[ADD <新表级完整性约束>]
[DROP [COLUMN] <列名> [CASCADE|RESTRICT]]
[DROP CONSTRAINT <完整性约束名> [RESTRICT|CASCADE]]
[ALTER COLUMN <列名> [(<新列名> <新数据类型>) | <新数据类型>] | set default <值>];
说明 RENAME--修改表名
ADD--增加新列、新的列级完整性约束条件、新的表级完整性约束条件
DROP--删除表中的列、指定的完整性约束条件
ALTER COLUMN--修改原有的列定义(列名、数据类型)、设置列的默认值
举例 向Student表增加“入学时间”列,数据类型为日期型
ALTER TABLE Student ADD Sentrance DATE;
将Student表中年龄的数据类型由字符型改为整数型
ALTER TABLE Student ALTER COLUMN Sage INT;
增加Course表中课程名称必须唯一的约束条件
ALTER TABLE Course ADD UNIQUE(Cname);
删除基本表
格式 DROP TABLE <表名> [RESTRICT|CASCADE];
说明 如果选择为RESTRICT,则表不能被其他表的约束引用(如CHECK、FOREIGN KEY),不能索引,不能有视图,不能有触发器(trigger),不能有存储过程或函数;
不同RDBMS对于RESTRICT和CASCADE的处理不同,需参考用户手册
建立索引
格式 CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名> [<次序>] [, <列名> [<次序>]] ...);
说明 UNIQUE--此索引的每一个索引值只对应唯一的数据记录
CLUSTER--要建立的索引时聚簇索引???
索引可以建在该表的一列或多列上,每个列名后面可以用<次序>指定所引致的排列次序,ASC-升序(默认),DESC-降序
举例 为Student表按照学号升序建立唯一索引
CREATE UNIQUE INDEX Stusno ON Student(Sno);
为Course表按照课程号升序建立唯一索引
CREATE UNIQUE INDEX Coucno ON Course(Cno);
为SC表按照学号升序,课程号降序建立唯一索引
CREATE UNIQUE SCno ON SC(Sno, Cno DESC);
注:附录--04.索引理解、05.数据字典
修改索引
格式 ALTER INDEX <旧索引名> RENAME TO <新索引名>;
删除索引
格式 DROP INDEX <索引名>;
说明 删除索引时,会同时从数据字典中删去有关该索引的描述
附:
01.schema和database的区别
schema是一个名字空间,创建在某个database下的;一个database下可以包含多个schema。
schema的好处有三点:
1.多个用户使用同一个数据库而不会相互影响。
2.对数据库中的对象进行逻辑分组,更便于管理。
3.各个应用分别使用各自的模式,以避免命名冲突。
各个数据库产品的database和schema定义不尽相同,需具体情况具体分析
02.数据类型(不同关系数据库管理系统的数据类型不尽相同)
数据类型 含义
CHAR(n)/ 同CHARACTER(n)
CHARACTER(n) 长度为n的定长字符串
VARCHAR(n)/ 同CHARACTERVARYING(n)
CHARACTERVARYING(n) 最大长度为n的变长字符串
CLOB 字符串大对象
BLOB 二进制大对象
INT/ 同INTEGER
INTEGER 长整数(4字节)
SMALLINT 短整数(2字节)
BIGINT 大整数(8字节)
NUMERIC(p,d) 定点数,小数点前有p位(不包括小数点、符号),小数点后有d位
DECIMAL(p,d)/ 同DEC(p,d)
DEC(p,d) 同NUMERIC
REAL 取决于机器精度的单精度浮点数
DOUBLE PERCISION 取决于机器精度的双精度浮点数
FLOAT(n) 可选精度的浮点数,精度至少为n位数字
BOOLEAN 逻辑布尔值
DATE 日期,包含年、月、日,格式为YYYY-MM-DD
TIME 时间,包含时、分、秒,格式为HH:MM:SS
TIMESTAMP 时间戳类型
INTERVAL 时间间隔类型
03.模式与表
每一个基本表都属于某一个模式,当定义基本表时有三个方法定义它所属的模式
CREATE TABLE "S-T".Student(...);
创建模式同时创建表
设置所属的模式
1.创建数据库对象时没有指定所属模式,会根据搜索路径来确定该对象所属的模式;
2.搜索路径包含一组模式列表,第一个存在的模式会被用来作为数据库对象所属模式;
3.通过show search_path;查看当前搜索路径;
4.DBA可通过SET search_path TO "S-T", PUBLIC;设置当前搜索路径
04.索引理解
用户可以根据应用环境的需要在基本表上建立一个或多个索引,以提供多种存储路径,加快查找速度
索引分类
顺序文件上的索引:
针对按指定属性值升序或降序存储的关系,在该属性上建立一个顺序索引文件
索引文件由属性值和相应的元组指针组成。
B+树索引:
将索引属性组织成B+树的形式,
B+树的叶节点为属性值和相应的元组指针。
优点:动态平衡
散列索引:
建立若干个桶,将索引属性按照其散列函数值映射到相应桶中
桶中存放索引属性值和相应的元组指针
优点:查找速度快
位图索引:
用位向量记录索引属性中可能出现的值,每个位向量对应一个可能值
不同RDBMS支持的索引类型不同。
索引应该由DBA或表的owner来创建和维护。
用户不能显示选择索引。索引是RDBMS的内部实现技术,属于内模式。
05.数据字典
数据字典是RDBMS内部的一组系统表
记录了数据库中所有定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、一些统计信息等
执行DDL,实际就是更新数据字典表中的对应信息
根据数据字典中的信息进行查询优化和查询处理