基本表的定义、修改与删除(级联与限制)

定义基本表
CREATE TABLE<表名>
(<列名><数据类型>[<列级完整性约束条件>]
[,<列名><数据类型>[<列级完整性约束条件>]

[,<表级完整性约束条件>]);
<表名>:索要定义的基本表的名字
<列名>:组成该表的各个属性(列)
<列级完整性约束条件>:涉及相应属性列的完整性约束条件
<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件
建表的同时通常还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由关系数据库管理系统自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
例1.1:建立“学生”表student,学号是主码,姓名唯一:

CREATE TABLE student(
     Sno CHAR(9) PRIMARY KEY,/*列级完整性约束条件,Sno是主码*/
Sname CHAR(20) UNIQUE,/*Sname取唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);

例1.2:建立一个“课程”表Course

CREATE TABLE Course(
 Cno CHAR(4) PRIMARY KEY,/*列级完整性约束条件,Cname不能取空值*/
 Cname CHAR(40) NOT NULL,/*Cpno的含义是先修课*/
 Cpno CHAR(4),
 Ccredit SMALLINT,
 FOREING KEY(Cpno)REFERENCES Course(Cno)/*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno*/
 );

例1.2说明参照表和被参照表可以是同一个表
例1.3:建立学生选课表SC:

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*/
);

修改基本表
ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ]
[ DR O P CO N ST R A I N T < 完 整 性 约 束 名 > [ R E ST R I CT | CASCADE ] ]
[ALTER COLUMN <列名><数据类型> ] ;
<表名>:是要修改的基本表 。
ADD子句:用于增加新列、新的列级完整性约束条件和新的表级完整性约束 条件。
DROP COLUMN子句:用于删除表中的列
如果指定了CASCADE短语,则自动删除引用了该列的其他对象 ;
如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系 统将拒绝删除该列 。
DROP CONSTRAINT子句:用于删除指定的完整性约束条件 。
ALTER COLUMN子句:用于修改原有的列定义,包括修改列名和数据类型。
例1.4:向Student表中增加“入学时间”列,其数据类型为日期型:

ALTER TABLE Student ADD S_entrance DATE;

例1.5:增加课程名称必须取唯一值的约束条件:

ALTER TABLE Course ADD UNIQUE(Cname);

例1.6:讲年龄的数据类型由字符型改为整数:

ALTER TABLE Student ALTER COLUMN Sage INT;

删除基本表
DROP TABLE <表名>[RESTRICT|CASCADE];
RESTRICT:删除表是有限制的。
CASCADE:删除该表没有限制。
例1.7:删除Student表:

DROP TABLE Student CASCADE;

例1.8:若表上建有视图,选择RESTRICT时表不能删除:

CREATE VIEW IS_Student /*Student表上建立视图*/
AS
SELECT Sno, Sname, Sage 
FROM Student 
WHERE Sdept='IS';
DROP TABLE Student RESTRICT;/*删除Student表*/
--ERROR:cannot drop table Student because other objects depend on it/*系统返回错误信息,存在依赖该表的对象,此表不能被删除*/
DROP TABLE Student CASCADE;/*删除Student表*/
--NOTICE:drop cascades to view IS_Student/*系统返回提示,此表上的视图也被删除*/
SELECT* FROM IS_Student;
--ERROR:relation"IS_Student"does not exist

你可能感兴趣的:(数据库SQL)