什么是视图
视图(view)是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的。视图并不存在数据库中真实存在,行和列数据来自定义视图的查询中使用的表,并且是在使用时动态生成的。
使用视图的优势
- 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的符合条件的结果集
- 安全:使用视图的用户只能访问他们被允许查询的结果集,对应的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现
- 数据独立:一单视图的结构确定了,可以屏蔽表结构变化对用户的影响、源表增加列队视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响
创建与修改视图
1 | create or replace view country_city_view as |
MySQL5.7.7 之前 FROM 关键字后面不能包含子查询。
视图的更新性与视图中查询的定义有关,以下类型的视图是不可更新的
- 包含以下关键字的语句:聚合函数(SUM,MIN,COUNT 等)、DISTINCT、GROUP BY、HAVING、UNION 或者 UNION ALL
- 常量视图
- SELECT 中包含子查询
- JOIN
- FROM 一个不能更新的视图
- WHERE 字句的子查询引用了 FROM 字句中的表
WITH [CASCADED]|[LOCAL] CHECK OPTION 决定了是否允许更新数据是记录不再满足视图的条件
- LOCAL 只要满足本视图的条件就可以更新
- CASCADED 则必须满足所有针对该视图的所有视图的条件才可以更新
如果没有明确是 LOCAL 还是 CASCADED 则默认是 CASCADED
删除视图
用户可以一次性删除多个视图
1 | drop view test1,test2,test3 |
查看视图
从 MySQL5.1 版本开始,使用 SHOW_TABLES 命令的时候不仅显示表的名字,同时也会显示视图的名字,而不存在单独显示视图的 SHOW VIEWS 命令。
show tables;
同样,在使用 SHOW TABLE STATUS 命令的时候,不但可以显示表的信息,同时也可以显示视图的信息。
show table status like 'country_city_view';
如果要查询某个视图的定义,可以使用 SHOW CREATE VIEW 命令进行查看
show create view country_city_view;
通过查看系统表
1 | use information_schema |