您的位置:首页 > 数据库 > MySQL

MySQL简单应用之视图(view)

2016-10-11 13:13 435 查看

1、建立数据库,并包含paper,customer和cp三个表格

1)建立数据库

我们首先是需要先建立数据库的:

drop database if exists DingBao;
create database DingBao;


这个是我们创建一个数据库,命名为DingBao,如果先前存在,则需要删除掉数据库。



这里就多了一个数据库dingbao,就是我们建立的数据库。

2) 建立表格

创建好数据库之后,我们进行表格的创建:

use DingBao;
create table paper(pno varchar(6),
pna varchar(8),
ppr numeric(3,1),
primary key(pno));

create table customer(
cno varchar(10),
cna varchar(20),
adr varchar(2000),
primary key(cno));

create table cp(
cno varchar(4),
pno varchar(6),
num numeric(1) default 1,
foreign key(cno) references customer(cno),
foreign key(pno) references paper(pno));


3) 查看相关信息

首先,我们需要使用这一个数据库,不然无法进行下面的操作,然后,再进行表格的 建立,新建了三个表格,其中分别为paper,cp和customer,我们可以看下这些表格中的 元素。



这是我们数据库中的表格,可以看到为三个我们建立的表格,我们再看下我们建立的表格 中的元素:



这些就可以看到我们建立的数据库中的一些形式了,我们看到的是pno和cno分别是paper 和customer的主键,而cp中的主键为cno和pno,也就是说,后面的两个主键为前面的 table的外键,所以,和题目中的定义是符合的,因此,我们的表格创建是正确的。

4) 插入数据

在确定了数据库之后,我们可以进行的是数据的插入,由于有了外键的关系,所以, 我们的插入,需要注意的是cp的应该放在最后面:

insert into customer values("0001","李涛","无锡市解放东路123号"),
("0002","钱金浩","无锡市人民西路234号"),("0003","邓杰","无锡市惠河路432号"),
("0004","朱海红","无锡市中山东路432号"),("0005","欧阳阳文","无锡市中山东路532号");
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);
insert into cp values("0001","000001",2),("0001","000002",4),
("0001","000005",6),("0002","000001",2),("0002","000003",2),
("0002","000005",2),("0003","000003",2),("0003","000004",4),
("0004","000001",1),("0004","000003",3),("0004","000005",2),
("0005","000003",4),("0005","000002",1),("0005","000004",3),
("0005","000005",5),("0005","000001",4);


我们可以看到cp的数据如下所示:



我们看到customer的数据和paper的数据分别如下所示:





所以,我们看到自己建立的数据库是正确的。

2、使用视图:

1)建立视图

create view C_P_N(cno,cna,pno,pna,num) as select customer.cno,cna,paper.pno,pna,num     from paper,cp,customer
where paper.pno = cp.pno and cp.cno = customer.cno;


我们看到的是得到的结果如下所示,所以,是正确的。



2) 增加额外的功能

通过新建如一句话,可以实现,加入单价的功能:

create view C_P_N(cno,cna,pno,pna,ppr,num) as select customer.cno,cna,paper.pno,pna,ppr,cp.num from paper,cp,customer
where paper.pno = cp.pno and cp.cno = customer.cno;




3) 查询人名日报的订阅情况:

Create view C_P_N(cno,cna,pno,pna,ppr,num) as select customer.cno,cna,paper.pno,pna,ppr,cp.num from paper,cp,customer
where paper.pno = cp.pno and cp.cno = customer.cno and paper.pna = "人民日报";




4) 对视图的修改

我们可以看到,修改对应的人员的参数,比如说,我们修改cno为0004的人员的订 购数目,全部都在原来的基础上加1,所以,我们看到的是和上一幅图相比,我们下面加 了1,这个是对表的修改而造成的视图的变动,我们需要做的是进行视图的直接修改:

update cp S
set num = num + 1
where S.cno = "0004";




修改视图:

set SQL_SAFE_UPDATES = 0;
update C_P_N set pna = "人民" where pna = "人民日报";
select * from C_P_N;


我们看到,这个里面是我们把“人民日报”,全部换为“人民”,可以看下结果为:



所以,结果是正确的。

这里,我们需要注意的是,SQL的数据库的安全等级是有要求的,如果,我们不加入前面的将安全等级设定为0的话,我们的系统就会报错,所以,我们需要加入设定安全等级为0的语句,由于这个是一个设定,所以,我们只需要设定一次就可以了,在下次重新启动数据库之前都是有效的。因此,我们需要注意这一个地方,在以后的实验中就不会出问题了。

5) 删除表格:

drop view c_p_n;

我们看到的是view那一栏是没有数据的:





上图中,左边是删除前的全部表格,右边的数据是删除后的全部表格。

3、创建ER图:

我们再写好了代码之后,首先点击我们的数据库,也就是dingbao,然后选择Databases的Reverse Engineer,然后,我们皆可以按照提示进行点击,在选择数据库的时候,选择我们自己的数据库dingbao,最后完成,就可以得到我们的ER图形了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 数据库 应用