SQL:
SQL语言原名SEQUEL (读作[si:kwl]),是一个通用的、功能极强的关系数据库语言。是一种介于关系代数与关系演算之间的结构化查询语言(Structured Query Language),其功能包括数据定义、数据查询、数据操纵和数据控制
SQL的特点:
基本表:
存储文件:
视图:
学生-课程模式 S-T
SQL的数据定义功能: 模式定义、表定义、视图和索引的定义
语法:
create database
例:create database student
使用数据库:
use
例:use student
删除数据库:
drop database
例:drop database student
模式
模式定义
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> ;
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义> |<视图定义> |<授权定义>]
CREATE SCHEMA Test AUTHORIZATION ZHANG
CREATE TABLE TAB1 (Sno char(9) PRIMARY KEY,
Sname char(20),
Sage int );
DROP SCHEMA <模式名>
CASCADE(级联)
例3.4:DROP SCHEMA Test CASCADE;
定义基本表
CREATE TABLE <表名>
(<列名> <数据类型> [ <列级完整性约束条件> ]
[,<列名> <数据类型> [ <列级完整性约束条件>] ] …
[,<表级完整性约束条件> ] );
[例3.5] 建立“学生”表Student。学号是主码,姓名取值唯一。
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY, /*主码 列级完整性约束条件*/
Sname VARCHAR(20) UNIQUE, /* Sname取唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
[例3.6 ] 建立一个“课程”表Course。
CREATE TABLE Course
( Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4) , /*先修课*/
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);
[例3.7] 建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno, Cno)为主码。
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)
);
常用完整性约束
ALTER TABLE <表名>
[ ADD [COLUMN]<新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [COLUMN]<列名>[CASCADE|RESTRICT] ]
[ DROP CONSTRAINT<完整性约束名[CASCADE|RESTRICT] ]
[ ALTER COLUMN <列名> <数据类型> ];
[例3.8] 向Student表增加“入学时间”列,其数据类型为日期型。
ALTER TABLE Student ADD S_entrance DATE;
不论基本表中原来是否已有数据,新增加的列一律为空值。
[例3.9] 将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT;
[例3.10] 增加课程名称必须取唯一值的约束条件。
ALTER TABLE Course ADD UNIQUE(Cname);
DROP TABLE <表名>[RESTRICT| CASCADE];
RESTRICT:删除表是有限制的
CASCADE:删除该表没有限制
[例3.12] 如果选择CASCADE时可以删除表,视图也自动被删除
DROP TABLE Student CASCADE;
–NOTICE: drop cascades to view IS_Student
SELECT * FROM IS_Student;
–ERROR: relation “ IS_Student ” does not exist
建立索引是加快查询速度的有效手段
建立索引
维护索引
使用索引
语句格式
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON
<表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
[例3.13] 为学生-课程数据库中的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);
唯一值索引
聚簇索引
例如:
CREATE CLUSTER INDEX Stusname ON Student(Sname);
在 Student 表的 Sname(姓名)列上建立一个聚簇索引,而且 Student表中的
记录将按照 Sname 值的升序存放
ALTER INDEX <旧索引名> RENAME TO <新索引名>
[例3.14] 将SC表的SCno索引名改为SCSno
ALTER INDEX SCno RENAME TO SCSno;
DROP INDEX <索引名>
[例3.15] 删除Student表的Stusname索引。
DROP INDEX Student.Stusname