有关数据库原理与统计的笔记,内容为书本的原文概括。
尖括号和圆括号内的指令可忽略不写,中括号内的语句不可忽略。
SQL的数据定义语句
操作对象 | 创建 | 删除 | 修改 |
---|---|---|---|
模式 | CREATE SCHEMA | DROPSCHEMA | |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
视图 | CREATE VIEW | DROP VIEW | |
索引 | CREATE INDEX | DROP INDEX | ALTER INDEX |
SQL标准不提供修改模式定义和修改视图定义的操作。用户如果想修改这些对象,只能将它们删除后再重建。SQL标准没有提供索引相关的语句,但为了提高查询效率,商用关系数据库管理系统通常都提供了索引机制和相关的语句。
在早期的数据库系统中,所有数据库对象都属于一个数据库,即只有一个命名空间,现代的关系数据库管理系统提供了一个层次化的数据库对象命名机制,一个关系数据库管理系统的实例中可以创建多个数据库,一个数据库中可以创建多个模式,一个模式下通常包括多个表、视图和索引等数据库对象。
模式定义语句:
CREATE SCHEMA <模式名> AUTHORIZATION [用户名]
如果没有指定模式名,则模式名默认与用户名一致。使用该指令的用户必须拥有数据库管理员权限,或者获得了数据库管理员授予的CREATE SCHEMA的权限。
CREATE SCHEMA "S-T" AUTHORIZATION WANG;
定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象。
用户可以在创建模式的同时,在这个模式定义中进一步创建基本表、视图,定义授权。
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1(COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);
删除语句:
DROP SCHEMA [模式名] CASCADE
或
DROP SCHEMA [模式名] RESTRICT
CASCADE:级联,表示在删除模式的同时把该模式中所有的数据库对象全部删除。
RESTRICT:限制,表示如果该模式中已经定义了下属的数据库对象,则拒绝该语句的执行。
定义基本表的格式:
CREATE TABLE [表名] ([列名] [数据类型] [列级完整性约束条件]
,[列名] <数据类型> [列级完整性约束条件]
.....
,[表级完整性约束条件];
)
表Student:
学号Sno | 姓名Sname | 性别Ssex | 年龄Sage | 所在系Sdept |
---|---|---|---|---|
21 | 李勇 | 男 | 20 | CS |
22 | 刘晨 | 女 | 19 | CS |
23 | 王敏 | 女 | 18 | MA |
25 | 张立 | 男 | 19 | IS |
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY, /*列级完整性约束条件,Sno为主码*/
Sname CHAR(20) UNIQUE, /*Sname取唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
表Course
课程号Cno | 课程名Cname | 先行课Cpno | 学分Ccredit |
---|---|---|---|
1 | 数据库 | 5 | 4 |
2 | 数学 | 2 | |
3 | 信息系统 | 1 | 4 |
4 | 操作系统 | 6 | 3 |
5 | 数据结构 | 7 | 4 |
6 | 数据处理 | 2 | |
7 | PASCAL语言 | 6 | 4 |
CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY, /*列级完整性约束条件,Cno为主码*/
Cname CHAR(40) NOT NULL, /*列级完整性约束条件,Cname不能取空*/
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno) /*表级完整性约束条件,Cpno为外码*/
/*被参照表为Course,被参照列为Cno*/
);
表SC
学号Sno | 课程号Cno | 成绩Grade |
---|---|---|
21 | 1 | 92 |
21 | 2 | 85 |
21 | 3 | 88 |
22 | 2 | 90 |
22 | 3 | 80 |
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY (Sno,Cno), /*主码由两个属性构成,必须作为表级完整性进行定义*/
FOREIGN KEY (Sno) REFERENCES Student(Sno), /*表级完整性约束条件,Sno为外码,Student为被参照表*/
FOREIGN KEY (Cno) REFERENCES Course(Cno) /*表级完整性约束条件,Cno是外码,Course为被参照表*/
);
数据类型 | 定义 |
---|---|
CHAR(n) ,CHARACTER(n) | 长度为n的定长字符串 |
VARCHAR(n),CHARACTERVARYING(n) | 最大长度为n的变长字符串 |
CLOB | 字符串大对象 |
BLOB | 二进制大对象 |
INT,INTEGER | 长整型(4个字节) |
SMALLINT | 短整型(2字节) |
BIGINT | 大整型(8字节) |
NUMERIC(p,d) | 定点数,由p位数字组成(p位不包括符号),小数点后面有d位数字 |
DECIMAL(p,d),DEC(p,d) | 定点数,由p位数字组成(p位不包括符号),小数点后面有d位数字 |
REAL | 取决于及其精度的单精度浮点数 |
DOUBLE PRECISION | 取决于机器精度的双精度浮点数 |
FLOAT(n) | 可选精度的浮点数,精度至少为n位数字 |
BOOLEAN | 布尔型 |
DATE | 日期型,格式:年-月-日 |
TIME | 时间型,格式:时:分:秒 |
TIMESTAMP | 时间戳型 |
INTERVAL | 时间间隔型 |
选取的数据类型需要考虑两个方面:取值范围、运算
每一个基本表都属于某一个模式,一个模式包含多个基本表。当定义基本表时一般可以有三种方法定义它所属的模式。分别为:
(1)在表名中给出模式名
(2)在创建模式语句中同时创建表
(3)设置所属的模式
当用户创建基本表时没有指定模式,系统会根据搜索路径来确定该对象所属的模式。
搜索路径包含一组模式列表,关系数据库管理系统会使用模式列表中第一个存在的模式作为数据库对象的模式名,若搜索路径中的模式名都不存在,系统将会报错。
显示当前的搜索路径:SHOW search_path
搜索路径的当前默认值是$user,PUBLIC。含义是首先搜索与用户名相同的模式名,如果该模式名不存在,则使用PUBLIC模式。
设置搜索路径:SET search_path TO [模式名],PUBLIC;
修改基本表的格式:
ALTER TABLE [表名]
ADD [COLUMN] [新列名] [数据类型] [完整性约束]
ADD [表级完整性约束]
DROP [COLUMN] [列名] CASCADE|RESTRICT
DROP CONSTRAINT [完整性约束名] CASCADE|RESTRICT
ALTER COLUMN [列名] [数据类型]
ADD子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件。
DROP COLUMN子句用于删除表中的列
DROP CONSTRAINT子句用于删除指定的完整性约束条件
ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型
ALTER TABLE Student ADD S_entrance DATE;
ALTER TABLE Student ALTER COLUMN Sage INT;
ALTER TABLE Course ADD UNIQUE(Cname);
删除表语句:
DROP [表名] CASCADE|RESTRICT
选择CASCADE,在删除基本表的同时,相关的依赖对象都将被删除。
选择RESTRICT,删除的表存在依赖该表的对象时,则该表不能被删除。依赖的对象有其他表的约束,视图,触发器,存储过程或函数。
DROP TABLE Student CASCADE;
CREATE VIEW IS_Student /*Student表上创建视图*/
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';
DROP TABLE Student RESTRICT; /*删除Studetn表,由于存在相应视图,会报错*/
DROP TABLE Student CASCADE; /*删除Student表及其依赖,返回删除提示*/
SELECT * FROM IS_Student /*视图已被删除,会报错*/
建立索引能够加快查询速度,数据库索引类能够快速定位到查询的内容,用户可以在基本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。
数据库索引类型:顺序文件上的索引、B+树索引、散列索引、位图索引。
顺序文件上的索引
:针对按指定属性值升序或降序存储的关系,在该属性上建立一个顺序索引文件,索引文件由属性值和相对应的元组指针组成。
B+树索引
:将索引属性组织成B+树形式,B+树的叶结点为属性值和相应的元组指针,B+树索引具有动态平衡的优点。
散列索引
:建立若干个桶,将索引属性按照其散列函数值映射到相应桶中,桶中存放索引属性值和相应的元组指针,散列索引具有查找速度快的特点。
位图索引
:用位向量记录索引属性中可能出现的值,每个位向量对应一个可能值。
索引能够加速数据库查询,但需要占用一定的存储空间,当基本表更新时,索引要进行相应的维护,这些都会增加数据库的负担,因此要根据实际应用的需要有选择地创建索引。
建立与删除索引由数据库管理员或表的属主,即建表的人,负责完成。关系数据库管理系统在执行查询时会自定选择合适的索引作为存取路径,用户不必选择索引
。索引是关系数据库管理系统的内部实现技术,属于内模式的范畴。
格式:
CREATE [UNIQUE] [CLUSTER] INDEX [索引名]
ON [表名] ([列名] [次序] ,....,[列名] [次序])
UNIQUE表明此索引的每一个索引值只对应唯一的数据记录。
CLUSTER表示要建立的索引是聚簇索引
Student表按选好升序建立唯一索引,Course表按照课程号建立唯一索引,SC表按学号升序和课程号降序建立唯一索引。
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
格式:
ALTER INDEX [旧索引名] RENAME TO [新索引名]
ALTER INDEX SCno RENAME TO SCSno;
格式:
DROP INDEX [索引名]
DROP INDEX Stusname;
数据字典是关系数据库管理系统内部的一组系统表,记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等。
关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息,在进行查询优化和查询处理时,数据字典中的信息是其重要依据。