三、实验步骤:
在MySQL数据库管理系统或SQL SERVER 环境下利用图形操作界面(非SQL语句)实现以下操作:
1、创建用于学生管理的数据库,数据库名为XSGL,包含学生信息,课程信息和选课信息。
数据库XSGL包含下列3 个表:
Create database xsgl;
(l) student:学生基本信息。
create table student(
sno VARCHAR(8) primary key,
sname varchar(4) not null,
ssex varchar(2) default '男',
sage int,
sdept varchar(10)
);
(2)course:课程信息表。
create table course(
cno varchar(2) PRIMARY key,
cname varchar(30),
credit int,
cpno varchar(3)
);
(3)sc:学生选课表。
create table sc(
sno varchar(10),
cno varchar(30),
PRIMARY key(sno,cno),
CONSTRAINT sno FOREIGN key(sno) REFERENCES student(sno),
CONSTRAINT cno FOREIGN key(cno) REFERENCES course(cno),
grade int CHECK(grade >=0 and grade <=100)
);
各表的结构分别如表1、表2和表3 所示。
表1 学生信息表:student
列名 |
数据类型 |
长度 |
完整性约束 |
sno |
字符(文本)型 |
8 |
主键 |
sname |
字符(文本)型 |
4 |
不为空 |
ssex |
字符(文本)型 |
2 |
默认值为’男’ 取值为’男’或’女’ |
sage |
整数(数值)型 |
||
sdept |
字符型 |
10 |
表2 课程信息表:course
列名 |
数据类型 |
长度 |
完整性约束 |
cno |
字符(文本)型 |
2 |
主键 |
cname |
字符(文本)型 |
30 |
|
credit |
整数(数值)型 |
||
cpno |
字符(文本)型 |
3 |
表3 学生选课表:sc
列名 |
数据类型 |
长度 |
完整性约束 |
sno |
字符(文本)型 |
10 |
主属性,外键 |
cno |
字符(文本)型 |
30 |
主属性,外键 |
grade |
整数(数值)型 |
取值在0-100之间 |
提示:在不使用SQL语句创建表的情况下,可通过SQL SERVER 2008中的数据库关系图(数据库节点展开—数据库关系图)实现外键的创建。外键字段和参照字段之间的数据类型以及长度要保持一致。
2、输入表中的记录
分别在student表、course表和sc表中输入如下表中的记录:
sno |
sname |
ssex |
sage |
sdept |
95001 |
李勇 |
男 |
20 |
CS |
95002 |
刘晨 |
女 |
19 |
IS |
95003 |
王敏 |
女 |
18 |
MA |
95004 |
张立 |
男 |
19 |
IS |
95005 |
刘云 |
女 |
18 |
CS |
cno |
cname |
credit |
pcno |
1 |
数据库 |
4 |
5 |
2 |
数学 |
6 |
|
3 |
信息系统 |
3 |
1 |
4 |
操作系统 |
4 |
6 |
5 |
数据结构 |
4 |
7 |
6 |
数据处理 |
3 |
|
7 |
PASCAL语言 |
4 |
6 |
sno |
cno |
grade |
95001 |
1 |
92 |
95001 |
2 |
85 |
95001 |
3 |
88 |
95002 |
2 |
90 |
95002 |
3 |
80 |
95003 |
2 |
85 |
95004 |
1 |
58 |
95004 |
2 |
85 |
insert into student(sno,sname,ssex,sage,sdept) values('95001','李勇','男',20,'CS'),
('95002','刘晨','女',19,'IS'),
('95003','王敏','女',18,'MA'),
('95004','张立','男',19,'IS'),
('95005','刘云','女',18,'CS');
insert into course (cno,cname,credit,cpno) values ('1','数据库',4,'5'),
('2','数学',6,''),
('3','信息系统',3,'1'),
('4','操作系统',4,'6'),
('5','数据结构',4,'7'),
('6','数据处理',3,''),
('7','PASCAL语言',4,'6');
insert into sc(sno,cno,grade) values('95001','1',92),
('95001','2',85),
('95001','3',88),
('95002','2',90),
('95002','3',80),
('95003','2',85),
('95004','1',58),
('95004','2',85);
3、对表中的记录进行浏览、修改、删除操作。
4、利用“分离数据库”和 “附加数据库”操作对SQL Server中创建的数据库做备份和还原操作。在MySQL中利用备份工具备份数据库,并了解如何还原数据。
5、用ALTER语句修改表结构;
alter table student add scome date;
alter table student drop sdept;
alter table sc drop FOREIGN key cno;
alter table sc add constraint cno FOREIGN key(cno) REFERENCES course(cno);
6、用CREATE INDEX语句在表STUDENT的SNAME字段上创建唯一索引;
create UNIQUE index sname_index on student(sname);
7、用DROP语句删除上题中创建的索引;
drop index sname_index on student;
8、用SQL语句建立如下MySPJ数据库,包括S,P,J,和SPJ四个基本表(教材第二章习题6中的四个表,并添加教材示例数据),要求实现关系的三类完整性。
S(SNO,SNAME,STATUS,CITY);
P(PNO,PNAME,COLOR,WEIGHT);
J(JNO,JNAME,CITY);
SPJ(SNO,PNO,JNO,QTY)
供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成。
零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成。
工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。
供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商供应某种零件给某工程项目的数量为QTY。
create database myspj;
create table s(
sno varchar(4) PRIMARY key,
sname varchar(10),
status varchar(2),
city varchar(10)
);
create table p(
pno varchar(4) primary key,
pname VARCHAR(10),
color varchar(2),
weight int
);
create table j(
jno varchar(4) primary key,
jname varchar(10),
city varchar(10)
);
create table spj(
sno varchar(4),
pno varchar(4),
jno varchar(4),
primary key(sno,pno,jno),
CONSTRAINT sno_fkey FOREIGN key(sno) REFERENCES s(sno),
CONSTRAINT pno_fkey FOREIGN key(pno) REFERENCES p(pno),
CONSTRAINT jno_fkey FOREIGN key(jno) REFERENCES j(jno),
qty int
);
insert into s(sno,sname,status,city) values ('s1','精益','20','天津'),('s2','盛锡','10','北京'),
('s3','东方红','30','北京'),
('s4','丰泰盛','20','天津'),
('s5','为民','30','上海');
insert into p(pno,pname,color,weight) values('p1','螺母','红',12),
('p2','螺栓','绿',17),
('p3','螺丝刀','蓝',14),
('p4','螺丝刀','红',14),
('p5','凸轮','蓝',40),
('p6','齿轮','红',30);
insert into j(jno,jname,city) values ('j1','三建','北京'),
('j2','一汽','北京'),
('j3','弹簧厂','天津'),
('j4','造船厂','天津'),
('j5','机车厂','唐山'),
('j6','无线电厂','常州'),
('j7','半导体厂','南京');
insert into spj (sno,pno,jno,qty) values ('S1','P1','J1',200),
('s1','p2','j3',100),
('s1','p1','j4',700),
('s1','p2','j2',100),
('s2','p3','j1',400),
('s2','p3','j2',200),
('s2','p3','j4',500),
('s2','p3','j5',400),
('s2','p5','j1',400),
('s2','p5','j2',100),
('s3','p1','j1',200),
('s3','p3','j1',200),
('s4','p5','j1',100),
('s4','p6','j3',300),
('s4','p6','j4',200),
('s5','p2','j4',100),
('s5','p3','j1',200),
('s5','p6','j2',200),
('s5','p6','j4',500);
(1)S表的Sname属性列的取值唯一。
alter table s add UNIQUE(sname);
(2)P表中Weight属性列的取值范围在1-50之间。
ALTER TABLE p ADD CONSTRAINT weight_limlit CHECK(weight between 1 and 50);
(3)J表中Jname的取值不能为空,并且是唯一的。
alter table j add CONSTRAINT jname_s unique(jname);
alter table j change column jname jname varchar(10) not null;
(4)SPJ表中QTY属性列的类型是int。
alter table spj modify qty int;
(5)给S表增加Sphone和Semail两列,分别用来存放供应商的电话号码和电子邮箱。
alter table s add column sphone varchar(11),add column semail varchar(20);
(6)删除Jname属性列的唯一约束。
alter table j drop CONSTRAINT jname_s;
(7)删除S表中属性列Semail。
alter table s drop column semail;