我从前最怕旁人火眼金睛,如今,倒是盼着有人能够洞幽烛远。如此,就能赠我一点欢喜。
实验1 数据定义
一、实验目的
熟悉SQL的数据定义语言,能够熟练地使用SQL语句来创建和更改基本表,创建和取消索引。
二、实验内容
1. 问题描述
2. 数据库设计
定义基本表:
CREATE TABLE <表名>
(<列名> <数据类型> [ <列级完整性约束条件> ]
[,<列名> <数据类型> [<列级完整性约束条件>] ] …
[,<表级完整性约束条件> ] );
注意:如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
Primary key 是主码,Unique 取唯一值,Foreign key(外码) references 被参照表(被参照列)
修改基本表:
ALTER TABLE <表名>
[ ADD [COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [COLUMN] <列名> [CASCADE|RESTRICT] ]
[ DROP CONSTRAINT <完整性约束名> ]
[ ALTER COLUMN<列名> <数据类型> ];
删除基本表:
DROP TABLE <表名>[RESTRICT| CASCADE];
RESTRICT:删除表是有限制的。
欲删除的基本表不能被其他表的约束所引用
如果存在依赖该表的对象,则此表不能被删除
CASCADE:删除该表没有限制。
在删除基本表的同时,相关的依赖对象一起删除
建立索引:
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
次序:ASC或DESC,缺省值为ASC
UNIQUE:唯一索引,每一个索引值对应唯一的数据记录;
CLUSTER:聚簇索引,索引项的顺序与表中记录的物理顺序一致,一个基本表上最多只能建立一个聚簇索引
删除索引:
DROP INDEX <索引名>;
删除索引时,系统会从数据字典中删去有关该索引的
描述。
3. 程序实现(1)
create table customers(
cid char(8) unique,
cname char(15),
city char(20),
discnt int,
primary key(cid)
)
create table agents(
aid char(8) unique,
aname char(15),
city char(20),
postcode int,
primary key(aid)
)
create table products(
pid char(8) unique,
pname char(15),
primary key(pid)
)
(2)
create table orders(
ordna char(8) unique,
month int,
cid char(8) unique,
aid char(8) unique,
pid char(8) unique,
qty int,
dollars float,
primary key(ordna),
foreign key (cid) references customers(cid),
foreign key (aid) references agents(aid),
foreign key (pid) references products(pid)
)
(3)
alter table products add city char(20)
alter table products add quantuty int
alter table products add price float
(4)
create index suoyin on customers(cid)
create index suoyin on agents(aid)
create index suoyin on products(pid)
create index suoyin on orders(ordna)
(5)
drop index customers.suoyin
drop index agents.suoyin
drop index products.suoyin
drop index orders.suoyin
4. 测试
(1)创建的三个数据库表如下:
customers表:
agents表:
products表:
(2)创建的orders数据库表如下:
(3)products表增加三个属性列后如下:
(4)以上四个表按主键升序排列建立索引:
customers表:
agents表:
products表:
orders表:
(5)取消(4)中建立的索引:
customers表:
agents表:
products表:
orders表:
试一试:经实验支持直接删除列的操作。