背景:对于复杂的查询,往往是有多个数据表进行关联查询而得到的,如果数据库因为需求等原因发生改变,为了保证查询出来的数据与之前的相同,则需要在多个地方进行修改,维护起来非常麻烦,解决这个问题的方案就是定义视图
- 视图,通俗的来说,就是select语句查询到的执行返回的结果集,视图是多若干张表的引用,一张虚表,查询语句执行的结果,视图不存储具体的数据,当基本的数据表中的数据发生了变化,视图中的数据也会跟着发生变化
2、视图使用流程
- 定义视图
create view 视图名称 as select语句;
如,根据之前创建的省市区的数据表,通过如下的命令可以查出来省-市-区结构,比如这里只查了江苏的情况:
那么这里其实就可以根据这个命令创建一个视图,这个视图中有三个字段,分别是省,市,和区,这样后续查询数据时就可以不用非常复杂的sql命令,而是直接从这个视图中查询了如:
mysql> create view v_province_city_dist as select p.atitle as province,c.atitle as city ,d.atitle as dist from areas as p, areas as c, areas as d where p.pid=0 and p.aid=c.pid and c.aid=d.pid;
- 查看视图
show tables;
- 使用视图
select * from v_province_city_dist where province='江苏省';
如下,视图看上去好像就是一个数据表一样
所以,当需求变化了,需要更新数据表的时候,为了适配已经开发的代码,可以通过创建一个视图来适配现有的代码,从而做到了数据库的修改与代码开发的解耦
这里还需要注意的是,视图是专门用例查看数据的,如果要修改数据,还是要取基本的数据表修改,而基础的数据表更新了,视图中查到的数据会同步更新的
- 删除视图
drop view xxx
如:
3、视图的作用
- 提高了重用性,就像一个函数接口一样
- 对数据库重构,却不影响程序的运行
- 提高了安全性能,可以对不同的用户
- 让数据更加清晰