数据库-(4)-SQL基础1-数据定义
基础概念
基本表
- 本身独立存在的表
- SQL中一个关系就对应一个基本表
- 一个或多个基本表对应一个存储文件
- 一个表可以带若干索引
存储文件
- 逻辑结构组成了关系数据库的内模式
- 物理结构是任意的,对用户透明
视图
- 从一个或几个基本表导出的表
- 数据库中只存放视图的定义,而不存放视图对应的数据(避免重复操作)
- 视图可以是一个虚表(实际数据库中不存在的表)
- 用户可以在视图之上再定义视图
学生-课程数据库
- 学生表:\(Student(\underline{Sno},Sname,Ssex,Sage,Sdept)\)
- 课程表:$Course(,Cname,Cpno,Ccredit) $
- 学生选课表:\(SC(\underline{Sno,Cno},Grade)\)
SQL定义语句
模式的定义与删除
模式的定义
为用户 \(WANG\) 定义一个学生-课程模式 \(S-T\)
1
CREATE SCHEMA "S-T" AUTHORIZATION WANG;
不指定模式,模式名隐含为用户名
1
CREATE SCHEMA AUTHORIZATION WANG;
建立模式的同时建立相关表:为用户 \(ZHANG\) 创建一个模式 \(TEST\), 并且在其中定义一个表 \(TAB1\)
1
2
3
4
5
6
7
8CREATE SCHEMA "TEST" AUTHORIZATION ZHANG;
CREATE TABLE TAB1(
COL1 SMALLINT,
COL2 INT,
COL3 CHART(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2) /*最后一行没有逗号 */
); /*整个语句写完之后才加上";" */
删除模式
级联模式删除
1
DROP SCHEMA ZHANG CASCADE;/*级联模式下删除,所有相关联的定义都将删除,就比如里面定义的表也会被删除*/
限制模式下删除
1
DROP ZHANG RESTRICT;/*级联模式下删除,所有相关联的定义都将删除*/
基本表的定义、删除与修改
定义基本表
建立一个学生表Student
1
2
3
4
5
6
7CREATE TABLE Student(
Sno CHAR(9)PRIMARY KEY, /*列级完整性约束条件,这里是表示主码*/
Sname CHAR(20)UNIQUE, /*取唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);建立一个课程表"Course"
1
2
3
4
5
6
7
8CREATE TABLE Course(
Cno CHAR(4)PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY(Cpno) REFERENCES Course(Cno)/*参照完整性,Cpno是外码,被参照表是Course,被参照列是Cno*/
);
/*参照表和被参照表可以是同一个表*/建立学生选课SC
1
2
3
4
5
6
7
8CREATE 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)
);
数据类型
数据类型 | 含义 |
---|---|
CHAR(n), CHARACTER(n) | 长度为n的定长字符串 |
VARCHAR(n), CHARACTERVARYING(n) | 最大长度为n的变长字符串 |
CLOB | 字符串大对象 |
BLOB | 二进制大对象 |
INT, INTEGER | 长整数(4字节) |
SMALLINT | 短整数(2字节) |
BIGINT | 大整数(8字节) |
NUMERIC(p,d) | 定点数,由p位数字(不包括符号、小数点)组成,小数点后面有d 位数字 |
DECIMAL(p,d), DEC(p,d) | 同NUMERIC |
REAL | 取决于机器精度的单精度浮点数 |
DOUBLE PRECISION | 取决于机器精度的双精度浮点数 |
FLOAT(n) | 可选精度的浮点数,精度至少为n位数字 |
BOOLEAN | 逻辑布尔量 |
DATE | 日期,包含年、月、日,格式为YYYY-MM-DD |
TLME | 时间,包含一日的时、分、秒,格式为HH:MM:SS |
TIMESTAMP | 时间戳类型 |
INTERVAL | 时间间隔类型 |
模式与表
- 显示表示:
CREATE TABLE "S-T".Student(…);
- 在创建模式的时候直接创建表。
- 设置所属的模式,然后就不必特意指定表的所属。
修改基本表
ALTER COLUMN
子句用于修改原有的列定义,包括修改列名和数 据类型
向 Student 表增加“入学时间”列,其数据类型为日期型。
1
ALTER TABLE Student ADD S_entrance DATE;
将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
1
ALTER TABLE Student ALTER COLUMN DATE;
增加课程名称必须取唯一值的约束条件。
1
ALTER TABLE Course ADD UNIQUE(Cname);
删除基本表
当某个基本表不再需要时,可以使用 DROP TABLE
语句删除它。其一般格式为:DROPTABLE <表名> [ RESTRICT I CASCM>E] ;
删除 Student 表。
1
DROP TABLE Student CASCADE;
基本表定义一旦被删除,不仅表中的数据和此表的定义将被删除,而且此表上建立的 索引、触发器等对象一般也都将被删除。有的关系数据库管理系统还会同时删除在此表上 建立的视图。
索引的建立与删除
在 SQL
语言中,建立索引使用CREATE INDEX
语句,其一般格式为:
1 |
|
索引建立
为学生-课程数据库中的
Student、 Course、 SC
三个表建立索引。其中Student
表按学号升序建唯一索引,Course
表按课程号升序建唯一索引,SC
表按学号升序 和课程号降序建唯一索引。1
2
3CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC); /*ASC表示升序,DESC表示降序,一般升序都可以默认不写*/
索引修改
将SC 表的
SCno
索引名改为SCSno
1
ALTER INDEX SCno RENAME TO SCSno;
删除索引
删除
Student
表的Stusname
索引。1
DROP INDEX Stusname;