关系数据库系统支持三级模式结构,其模式,外模式,内模式中的基本对象有模式、表、视图和索引
所以SQL的数据定义功能包括模式定义、表定义、视图定义(见视图一节)和索引定义
模式的定义与删除
定义模式
(1)为用户wang定义一个学生-课程模式S-T
CREATE SCHEMA "S-T" AUTHORIZATION wang; //可以没有模式名,但是会隐含用户名为模式名
(2)为用户zhang创建模式一个模式test,并在其中定义一个表tab1
CREATE SCHEMA test AUTHORIZATION zhang CREATE TABLE tab( C1 SMALLINT. C2 INT, C3 CHAT(20), C4 NUMERIC(10,3) );
删除模式
DROP SCHEMA zhang CASCADE; //CASCADE(级联)和RESTRICT(限制)两者必选其一!该语句删除模式zhang,同时,该模式中已经定义的表tab也被删除了
表的定义、删除与修改
定义表
(1)建立一个“学生”表Student
CREATE TABLE Student( Sno CHAR(9) PRIMARY KEY, //Sno是主键 Sname CHAR(20) UNIQUE, //Sname取唯一值 Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) );
(2)建立一个“课程”表Course
CREATE TABLE Course( Cno CHAR(9) PRIMARY KEY, //Cno是主键 Cname CHAR(40) NOT NULL, //Cname不能为空值 Ccredit SMALLINT, FOREIGN KEY (Cpno) REFERENCES Course(Con) //Cpno是外键,被参照表是Course,被参照列是Cno );
(3)建立学生选课表SC
CREATE TABLE SC( Sno CHAR(9), Cno CHAR(4), Grade SMALLINT, PRIMARY KE (Sno,Cno), //主键由两个属性构成 FOREIGN KEY (Sno) REFERENCES Student(Sno), //Sno是外键,被参照表是Student FOREIGN KEY (Cno) REFERENCES Course(Cno) //Cno是外键,被参照表是Course );
数据类型
(1)CHAR(2)INT(3)SMALLINT.....
模式与表
每一个表(基本表)都属于某一个模式,一个模式包含多个表。定义表时有三种方法定义它所属的模式。
(1)
CREATE TABLE "S-T".Student(...); CREATE TABLE "S-T".Course(...); CREATE TABLE "S-T".SC(...);
(2)模式定义的(2)
(3)...
修改表
(1)向Student表增加“入学时间”列,其数据类型为日期型
ALTER TABLE Student ADD S_entrance DATE; //不论表中原来是否已有数据,新增加的列一律为空值
(2)将年龄的数据类型由字符型改为整数型
ALTER TABLE Student ALTER COLUMN Sage INT;
(3)增加课程名称必须取唯一值的约束条件
ALTER TABLE Course ADD UNIQUE(Cname);
删除表
(1)删除Student表
DROP TABLE Student CASCADE;如果表上有视图选择 RESTRICT 是表不能删除;选择 CASCADE 是可以删除表,视图也自动被删除
索引的建立与删除
建立索引
(1)为学生-数据库中的 Student、Course 和 SC 三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引
CEEATE UNIQUE INDEX Stusno ON Student(Sno); //Stusno为索引名 CEEATE UNIQUE INDEX Coucno ON Course(Cno); CEEATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC); //ASC:升序 DESC:降序
修改索引
(1)将 SC 表的 SCno 索引名改为 SCSno
ALTER INDEX SCno RENAME SCSno;
删除索引
(1)删除 Student表的 Stusname 索引
DROP INDEX Stusname;