1.什么是视图
视图其实也是一种表,就是一种虚拟存在的表。在实际的数据库中并不存在。
在开发中,我经常使用视图来进行多表的查询,使用触发器来进行多表的增、删、改。使用视图直观的感受就是简化了多表查询,省得嵌套查询一层又一层的select。
2.创建视图
准备的表:
CREATE TABLE goods(
gid int primary key,
name varchar(20),
num smallint
);
CREATE TABLE orders(
oid int primary key,
gid int,
much smallint
);
insert into goods(gid,name,num) values(1,"dog",10),(2,"cat",20),(3,"pig",30);
insert into orders values(110,3,10);
创建单表查询的视图:
create view goods_view as select * from goods where gid=1
操作:
select * from goods_view$$
结果:
创建多表关联查询的视图:
create view goods_view2 as select g.gid,g.gname,g.gnum,o.oid,o.onum from goods as g,orders as o where g.gid=o.gid$$
操作:
select * from goods_view2$$
结果:
3.mysql的视图常用命令
删除视图:
drop view 视图名称
查看视图:
show tables;
或者:
show table status like '视图名称';
更新视图:
alter view 视图名 as .....
4.注意
mysql对视图的定义还是有一些限制的。首先from关键字后面不能玩子查询了。
以下是玩alter更新视图时不可更新的操作:
包含关键字的SQL语句:聚合函数(count、max...),DISTINCT,GROUP BY,HAVING,UNION,UNION ALL。
常量视图
SELECT中包含子查询
JOIN
FROM一个不能更新的视图
WHERE的子查询用了from,前面提到过了。。
5.使用视图好处
简单方便:可以简化我们查询的条件等过滤条件的编写。
安全:使用视图的用户只能访问他们被允许查询的结果集。
数据无变化:一旦我们将视图的结构确定了,就可以屏蔽掉表结构的变化对用户的影响了。即使原表发生了变化,只需修改视图来解决。