创建了一个模式即建立了一个数据库的命名空间,一个框架。SQL语言使用create table语句定义基本表,格式如下:
create table <表名>(<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]
......
[,<表级完整性约束条件>]
);
建表的同时可以定义与该表有关的完整性约束条件,这些约束条件会被存入系统的数字字典中,当用户操作表中数据时由关系数据库管理系统自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及该表的多个属性列,则必须定义在表级上,否则既可以定义在表级上也可以定义在列级上。
例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(4) primary key, /*列级完整性约束条件,Cno是主码*/
Cname char(40) not null, /*列级完整性约束条件,Cname不能是空值*/
Cpno char(4), /*Cpno的意思是先修课*/
Ccredit smallint,
foreign key(Cpno) references Course(Cno)
/*表级完整性约束条件,Cpno是外码,被参照表是course,被参照列是Cno*/
);
例2 说明参照表和被参照表可以是一个表
例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*/
);
SQL语言用alter table语句修改基本表,其一般格式为:
alter table<>
[add [column] <新列名><数据类型> [完整性约束] ]
[add <表级完整性约束> ]
[drop [column] <列名> [cascade|restrict] ]
[drop constraint <完整性约束名> [cascade|restrict] ]
[alter column <列名><数据类型>];
<表名>是要修改的基本表。add子句用于添加新列、新列的完整性约束条件和新的表级完整性约束条件。
drop column子句用于删除表中的列,如果指定cascade短语,则自动删除引用了该列的其他对象,比 如视图;如果使用restrict短语,如果此列被其他对象引用,rdbms将拒绝删除该列。
drop constraint子句用于删除hiding的完整性约束条件。
alter column子句用于修改原有的列定义,包括修改列名和数据类型。
例1:向Student表增加“入学时间”列,其数据类型是日期型。
alter table Student add S_entrance date;
不论基本表中是否已有数据,新增加的列一律为空值。
例2:将年龄的数据类型由字符型(假设原本为字符型)改为整数。
alter table Course alter cloumn Sage int;
例3:增加课程名称必须取唯一值的约束条件。
alter table Course add unique(Cname);
当某个基本表不再需要时,可以使用drop table语句删除它,其一般格式为:
drop table <表名>[restrict|cascade];
若选择restrict,则该表的删除是有条件的,此表不能被其他对象约束所引用(如check foreign key等),不能有视图,不能有触发器,不能有存储过程或函数等。若存在依赖对象,则此表不能删除。
若选择cascade,则没有限制。在删除基本表的同时,相关的依赖对象,例如视图,会被一起删除。
默认情况下是restrict。
例:删除Student表。
drop table Student cascade;
基本表定义一旦被删除,不仅表中的数据和此表的定义将被删除,而且此表上建立的索引,视图,触发器等一切对象都会被删除。如果欲删除的基本表被其他基本表所引用,则这些表也可能会被删除。因此执行删除基本表的操作一定要小心。