文章目录
1 数据定义
1.1 模式的定义与删除
1.1.1 定义模式
create schema <模式名> authorization <用户名>;
- 为用户WANG定义一个学生-课程模式S-T
create schema “S-T” authorization WANG;
- 语句没有指定<模式名>,<模式名>隐含为<用户名>
create schema authorization WANG;
- 为用户ZHANG创建了一个模式TEST,并且在其中定义一个表TAB1
create schema TEST authorization ZHANG
create table TAB1(COL1 smallint,
COL2 int,
COL3 char(20),
COL4 numeric(10, 3),
COL5 decima(5,2));
1.1.2 删除模式
drop schema <模式名> <cascade|restrict>
-
cascade(级联)
- 删除模式的同时把该模式中所有的数据库对象全部删除
-
restrict(限制)
- 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。
- 仅当该模式中没有任何下属的对象时才能执行。
- 删除模式ZHANG,同时该模式中定义的表TAB1也被删除
drop schema ZHANG cascade;
1.2 基本表的定义、删除和修改
1.2.1 定义基本表
create table <表名>(<列名> <数据类型> [列级完整性约束条件], <列名> <数据类型> [列级完整性约束条件], … , [<表级完整性约束条件>]);
- 列级完整性约束条件:涉及相应属性列的完整性约束条件。
- 表级完整性约束条件:涉及一个或多个属性列的完整性约束条件
- 如果完整性约束条件设计到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
- 建立Student表。学号是主码,姓名取值唯一。
create table Student(Sno char(9) primary key,
Sname char(20) unique,
Ssex char(2),
Sage smallint,
Sdept char(20));
- 建立一个Course表
create table Course(Cno char(4) primary key,
Cname char(40),
Cpno char(4), /*Cpno表示先修课*/
Ccredit smallint,
foreign key (Cpon) references Course (Cno)); /*Cpno是外码,被参照表是Course,被参照列是Cno*/
- 建立一个学生选课表SC
create table SC(Sno char(9),
Cno char(4),
Grade smallint,
primary key (Sno, Cno), /*主码由两个属性构成,必须作为表级完整性进行定义*/
foreign key (Sno) references Student (Sno),
foreign key (Cno) references Course (Cno));
1.2.2 数据类型
不同的关系数据库管理系统支持的数据类型不完全相同。
数据类型 | 含义 |
---|---|
char(n) | 长度为n的定长字符串 |
varchar(n) | 最大长度为n的变长字符串 |
clob | 字符串大对象 |
blob | 二进制大对象 |
int | 整型(4字节) |
smallint | 短整型(2字节) |
bigint | 大整形(8字节) |
numeric(p, d) | 定点数,由p位数字(不包括符号、小数点)组成,小数点后面有d位数字 |
decimal(p, d), dec(p, d) | 同numeric |
real | 取决于机器精度的单精度浮点数 |
double precision | 取决于机器精度的双精度浮点数 |
float(n) | 可选精度的浮点数,精度至少为n位数字 |
bollean | 逻辑布尔量 |
date | 日期,包含年、月、日,格式为YYYY-MM-DD |
time | 时间,包含一日的时、分、秒,格式为HH:MM:SS |
timestamp | 时间戳类型 |
interval | 时间间隔类型 |
1.2.3 模式与表
-
法一:在表名中明显地给出模式名
create table "S-T".Student(...);
-
法二:在创建模式语句中同时创建表
-
法三:设置所属地模式,这样在创建表时表名中不必给出模式名
1.2.3 修改基本表
alter table <表名> [add [column] <新列名> <数据类型> [完整性约束]]
[add <表级完整性约束>]
[drop [column] <列名> [cascade|restrict]]
[drop constraint <完整性约束名> [cascade|restrict]]
[alter column <列名> <数据类型>];
- add子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件
- drop constraint子句用于删除指定的完整性约束条件
- alter column子句用于修改原有的列定义,包括修改列名和数据类型
- 向Student表增加“入学时间”列,其数据类型为日期型。
alter table Student add S_entrance date;
- 将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
alter table Student alter column Sage int;
- 增加课程名称必须取唯一值的约束条件。
alter table Course add unique(Cname);
1.2.4 删除基本表
drop table <表名> [restrict|cascade];
- 若选择restrict,则该表的删除是有限制条件的。欲删除的基本表不能被其他表的约束所引用(如check、foreign key等约束),不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则此表不能被删除。
- 若选择cascade,则该表的删除没有限制条件。在删除基本表的同时,相关的依赖对象,例如视图,都将一起删除。
- 默认情况是restrict。
- 删除Student表
drop table Student cascade;
1.3 索引的建立与删除
1.3.1 建立索引
create [unique] [cluster] index <索引名> on <表名> (<列名> [<次序>], <列名> [<次序>] …);
- 次序可选asc(升序)或desc(降序),默认值为asc。(物理存储不变,按关键字重新排序)
- unique表明此索引的每一个索引值只对应唯一的数据记录。
- cluster表示要建立的索引是聚簇索引。
- 为Student、Course和SC三个表建立索引。其中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);
1.3.2 修改索引
alter index <旧索引名> rename to <新索引名>
- 将SC表的SCno索引名改为SCSno。
alter inted SCno rename to SCSno;
1.3.3 删除索引
drop index <索引名>
- 删除索引时,系统会同时从数据字典中删去有关该索引的描述。
- 删除Student表的Stusname索引
drop index Stusname;