实验课教材(MySQL数据库技术与实验指导)第66页“实验内容与要求”1-3题
1 、实验内容与要求
( 1 )创建数据库及表
用己掌握的某种方法,创建订报管理子系统的数据库 DingBao ,在 DingBao 数据库中用交互式界面操作方法或 CREATETABLE 创建如下 3 张表所示的表结构(表名及字段名使用括号中给出的英文名,如表 3-1 ~ 3-2 )并完成 3 张表所示内容的输入,根据需要可自行设计输入更多的表记录。
报纸编号 ( pno ) | 报纸名称 (pna) | 单价 ( ppr ) |
---|---|---|
000001 | 人民日报 | 12.5 |
000002 | 解放军报 | 14.5 |
000003 | 光明日报 | 10.5 |
000004 | 青年报 | 11.5 |
000005 | 扬子晚报 | 18.5 |
表 3-1 报纸编码表( PAPER ) 表 3-2 顾客编码表( CUSTOMER )
顾客编号 ( cno ) | 顾客姓名 (cna) | 顾客地址 ( adr ) |
---|---|---|
0001 | 李涛 | 解放东路 123 号 |
0002 | 钱金浩 | 人民西路 234 号 |
0003 | 邓杰 | 惠河路 270 号 |
0004 | 朱海红 | 中山东路 432 号 |
0005 | 欧阳阳文 | 无锡市中山东路 532 号 |
表 3-3 报纸订阅表( CP )
顾客编号 ( cno ) | 报纸编号 (pna) | 订阅份淑 ( num ) |
---|---|---|
0001 | 000001 | 2 |
0001 | 000005 | 6 |
0002 | 000003 | 2 |
0003 | 000003 | 2 |
0004 | 000001 | 1 |
0004 | 000005 | 1 |
0005 | 000002 | 1 |
0005 | 000005 | 5 |
创建表结构时要求满足:
● 报纸编码表( PAPER )以报纸编号( pno )为主键,并为报纸编码表( PAPER )定义一个单价不大于 30 的 CHECK 约束;
● 顾客编码表( CUSTOMER )以顾客编号( cno )为主键,并为身份证号 (id) 创建 UNIQUE 约束。
● 报纸订阅表( CP )以报纸编号( pno )与顾客编号( cno )为主键, pno 和 cno 分别引用报纸编码表( PAPER )的报纸编号( pno )和顾客编码表( CUSTOMER )的顾客编号( cno ),订阅份树的默认值为 1 。
创建一个 ACCESS 数据库 DingBao(DingBao.MDB 文件 ) ,把在 SQL SERVER 中创建的 3 表导出到 ACCESS 数据库中。
( 2 )创建与使用视图
● 在 DingBao 数据库中,创建含有顾客编号、顾客姓名、报纸编号、报纸名称、订阅份数等信息的视图,视图名设定为 C_P_N 。
● 修改已创建的视图 C_P_N ,使其含有报纸单价信息。
● 通过视图 C_P_N ,查询“人民日报”被订阅的情况,能通过视图 C_P_N 实现对数据的更新操作吗?请尝试各种更新操作,例如修改某人订阅某报的份数,修改某报的名称等。
● 删除视图 C_P_N 。
实验过程:
--逐一插入元素
insert into paper
values('000001','人民日报',12.5);
insert into paper
values('000002','解放军报',14.5);
insert into paper
values('000003','光明日报',10.5);
insert into paper
values('000004','青年报',11.5);
insert into paper
values('000005','扬子日报',18.5);
运行select * from paper可知:
数据插入无误。
同理,完成另外两个表的数据插入
顾客订阅表的数据插入:
insert into cp
values('0001','000001',2);
insert into cp
values('0001','000002',4);
insert into cp
values('0001','000005',6);
insert into cp
values('0002','000001',2);
insert into cp
values('0002','000003',2);
insert into cp
values('0002','000005',2);
insert into cp
values('0003','000003',2);
insert into cp
values('0003','000004',4);
insert into cp
values('0004','000001',1);
insert into cp
values('0004','000003',3);
insert into cp
values('0004','000005',2);
insert into cp
values('0005','000003',4);
insert into cp
values('0005','000002',1);
insert into cp
values('0005','000004',3);
insert into cp
values('0005','000005',5);
insert into cp
values('0005','000001',4);
执行select * from cp可知插入数据正确无误:
对顾客编码表的数据插入:
insert into customer
values('0001','李涛','无锡市解放东路123号');
insert into customer
values('0002','钱金浩','无锡市人民西路234号');
insert into customer
values('0003','邓杰','无锡市惠和路432号');
insert into customer
values('0004','朱海红','无锡市中山东路432号');
insert into customer
values('0005','欧阳阳文','无锡市中山东路532号');
故表的建立和数据的插入均无误。
2.创建和使用视图
(1)C_P_N视图的创建:
--通过create 语句进行view的创建
create view C_P_N as
select cno,cna,pno,pna,num
from paper natural join cp natural join customer;
通过select * from C_N_P做检验:
故视图创建无误。
(2)通过alter语句进行修改视图:
alter view C_P_N as
select cno,cna,pno,pna,num,ppr
from paper natural join cp natural join customer;
select *
from c_p_n
where pna='人民日报';
尝试对视图的更新操作:
我输入了该语句:
update c_p_n set num=5 where cna="李涛";
实现了视图中李涛的订报数量的更改:
然后我查看cp表中的数据,发现李涛对应的序号0001的num同样发生了修改:
故通过视图是可以完成修改的。
类似地,将“青年报”更改为“老年报”:
SQL语句:
update c_p_n set pna="老年报" where pno='000004';
DROP VIEW IF EXISTS c_p_n;
然后c_p_n视图已经被删除;
3.创建数据库ER图
通过反向工程可以生成ER图(实际上我创建时就是用ER图进行创建的)
然后修改名称为db_diagram
实验感想:
通过此次实验对MYSQL的图形界面和命令行模式都有了一定的了解,并且掌握了基本的操作,实验总体来说是比较容易的,但由于对软件的不熟悉导致花费了一定的时间去熟悉。此次实验我通过界面模式和命令行模式均进行了一遍,对表、视图、ER图等基础操作都有了不错的掌握,相信自己在之后的实验会越来越顺手。