视图概述
视图View是一种虚拟存在的表.行和列数据来自自定义视图的查询中使用的表,在使用视图时动态生成.
视图的优势:
简单:用户不需要关心后面对应的表的结构,关联条件和筛选条件.对用户来说事已经过滤筛选好的复合条件的结果集. -- 那应该就是相当于Java中的接口了.
安全:使用视图的用户只能访问他们被允许查询的结果集;而表的权限管理并不能限制到某隔行某个列.
数据独立:一旦视图的结构确定了,屏蔽表结构对用户的影响:源表增加数据列对视图没有影响;源表修改列名,可以通过修改视图来解决.
视图操作
1).创建/修改视图
创建/修改/删除视图 都需要用相关权限.并且对于涉及的列具有SELECT权限.
a.创建视图
CREATE [OR REPLACE][ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED|LOCAL] CHECK OPTION]
b.修改视图
ALTER [ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
注意:MySQL 视图的定义有一些限制.
与其他数据库不同,在FROM关键字后面不能包含子查询.
可以通过把子查询中的内容定义成一个视图,然后对该视图创建视图就可以实现类似功能.
视图的可更新性与视图中查询的定义有关系.
以下类型的视图是不可更新的.
a.包含以下关键字的SQL语句:
聚合函数(SUM,MIN,MAX,COUNT等)
DISTINCT
GROUP BY
HAVING
UNION
UNION ALL
b.常量视图
c.SELECT 中 包含子查询.
d.JOIN
e.FROM 一个不能更新的视图
f.WHERE子句的子查询引用了FROM子句中的表
Demo:
--包含聚合函数
CREATE OR REPLACE VIEW payment_sum
AS
SELECT staff_id , SUM(amount)
FROM payment
GROUP BY staff_id ;
--常量视图
CREATE OR REPLACE VIEW pi AS
SELECT 3.141592653 as pi ;
-- SELECT 中包含子查询
CREATE VIEW city_view
AS
SELECT (SELECT city FROM city WHERE city_id = 1 ) ;
WITH [CASCADED|LOCAL] CHECK OPTION 决定了 是否允许更新数据 使得记录不再满足视图条件.
其中,LOCAL 是只要满足本视图条件就可以更新;CASCADED则是必须满足所有针对盖世兔的所有视图条件才可以更新. 如果没有明确指定,默认是CASCADED.
2).删除视图
可以一次性删除一个或者多个视图,前提是有该视图的DROP权限.
DROP VIEW [IF EXISTS] view_name [,view_name1,..,view_nameN] [RESTRICE | CASCADE]
3).查看视图
从MySQL5.1开始,不存在SHOW VIEWS 命令,统一使用SHOW TABLES命令.SHOW TABLE STATUS 命令同理,也会显示视图的信息.
SHOW TABLE STATUS [FROM db_name] [LIKE 'patter'] ;
查看视图定义
SHOW CREATE VIEW view_name ;
通过查看系统表information_schema.views 也可以查看视图相关信息.