(1)MySQL从5.0.1版本开始提供视图功能
(2)视图是虚拟表,由实际存在的表动态生成。
(3)为什么使用视图?
安全,简单,数据独立。
(4)注意:创建和修改视图要有相关的权限。
(5)MySQL的视图功能是比较弱的,视图的可更新性在这些情况下受限:
a. 包含以下关键字:聚合函数,DISTINCT ; GROUP BY ; HAVING ,UNION , 或者UNION ALL
b. 常量函数
c. SELECT 中包含子查询
d. JOIN
e. FROM 一个不能更新的视图
f. WHERE 子句的子查询引用了FROM子句中的表。
(5)创建视图的语法:
CREATE [OR REPLACE] [ALGORRITHM={UNDEFINED | MERGE | TIMESTAMP}]
VIEW view_name[(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL ]CHECK OPTION]
注释:
WITH[CASCADE | LOCAL] CHECK OPTION 决定了是否允许更新数据使记录不再满足视图的条件。
LOCAL:满足本视图的条件可以更新。
CASCADE:满足所有针对该视图的所有视图的条件才可以更新。
默认:CASCADE
示例:
CREATE OR REPLACE VIEW staff_list_view AS
SELECT s.staff_id ,s.first_name,s.last_name,a.address
FROM staff AS s,address AS a
where s.address_id=a.address_id;
修改视图:
ALTER [ALGORITHM={UNDEFINED| MERGE | TIMESTAMP}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADE | LOCAL] CHECK OOPTION]
删除视图:
DROP VIEW [IF EXISTS] view_name [RESTRICT | CASCASE]
示例:
drop view staff_list;
附注:
查看该数据库中有哪些表和视图:
show tables ;
所以对视图起名字的时候要注意起有区别的特殊标识符。
查看一个表(视图)的具体信息:
SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']
查看表定义:
show create view staff_list;\G
select * from views where table_name='staff_list'\G