注:本篇文章为《数据库系统概论》学习笔记,很多内容引用自此书。
关系数据库系统支持三级模式结构,其模式,外模式,内模式中的基本对象有模式,表,视图和索引等,因此SQL的数据定义功能包括模式定义、表定义、视图和索引的定义。
创建 删除 修改
模式: create schema drop schema
表: create table drop table alter table
视图: create view drop view
索引: create index drop index alter index
SQL标准不提供修改模式定义和修改视图定义的操作,用户如果想修改这些对象,只能将它们删除然后重建。SQL标准也没有提供索引相关的语句,但为了提高查询效率,商用关系数据库管理系统通常都提供了索引机制和相关的语句。
一个关系数据库管理系统的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象。
数据库 =》 模式 =》表、视图、索引等数据库对象。本质上是一个层次化的命名机制。
一、模式的定义和删除
定义模式:
create schema <模式名> authorization <用户名>;
如果没有指定<模式名>,那么<模式名>隐含为<用户名>
定义模式实际上就是定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象。
删除模式:
drop schema <模式名><cascade|restrict>;
级联和限制必须二选其一,删除模式时把模式内的数据库对象全部删除或者有下属的数据库对象则拒绝执行。
二、基本表的定义、删除与修改
create table student
(
Sno char(9) primary key,
Sname char(20) unique,
Ssex char(2),
Sage smallint,
Sdept char(20)
)charset gbk;
这里定义了列级完整性约束条件,主键和取唯一值
create table Course(
Cno char(4) primary key,
Cname char(40) not null,
Cpno char(4),
Ccredit smallint,
foreign key(Cpno) references Course(Cno)
)charset gbk;
这里定义了列级完整性约束条件,不能取空值
和表级完整性约束条件外键(参照表和被参照表是同一张表)
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)
)charset gbk;
这里定义了联合主键和外键,都是表级完整性约束条件
修改基本表:
alter table student add Sentrance date;
向学生表中增加入学时间列,其数据类型为日期型,不论表中是否已经有数据,新增加的列一律为null
alter table student alter column Sage int;
这是改变列的数据类型
alter table course add unique(Cname);
这是增加约束条件(课程名必须取唯一值)。
删除基本表:
drop table <表名> [restrict | cascade];
限制代表欲删除的表不能被其他表的约束所引用,不能有视图,不能有触发器,不能有存储过程或函数等否则不能删除
级联代表删除时,相关的依赖对象都将被一起删除
restrict是默认情况
比如:
create view is_student
as
select Sno,Sname,Sage
from Student
where Sdept = 'IS';
drop table student restrict;
失败
drop table student cascade;
理论成功,但实际在mysql环境下测试的时候,受外键约束,删除失败。这需要在配置外建的时候设置级联删除。
建立索引:
create unique index SCno on SC(Sno ASC,Cno desc);
索引建立在了两列上,并分别指定了各自的索引值的排列顺序
unique表明此索引的每一个索引值只对应唯一的数据记录。
修改索引:
alter index SCno rename to SCSno;
删除索引:
drop index <索引名>