视图由数据库中的一个表,视图或多个表,视图导出的虚拟表。其作用是方便用户对数据的操作。
必须要有CREATE VIEW 和 SELECT 权限
SELECT select_priv, create_view_priv from mysql.userWHERE user='root';
CREATE [ ALGORITHM = { UNDEFINED | MERGE |TEMPTABLE } ]
VIEW 视图名 [ ( 属性清单 ) ]
ASSELECT语句
[ WITH [ CASCADED | LOCAL ] CHECKOPTION ] ;
ALGORITHM参数表示视图选择的算法
UNDEFINED 未指定,自动选择
MERGE 表示将使用视图的语句和视图定义合并起来,使得视图定义的某一部分取代语句的对应部分
TEMPTABLE 表示将视图的结果存入临时表,然后使用临时表执行语句
LOCAL参数表示更新视图时要满足该视图本身定义的条件即可;
CASCADED参数表示更新视图时要满足所有相关视图和表的条件,默认值。
使用CREATE VIEW语句创建视图时,最好加上WITH CHECK OPTION参数和CASCADED参数。这样,从视图上派生出来的新视图后,更新新视图需要考虑其父视图的约束条件。这种方式比较严格,可以保证数据的安全性。
create viewdepartment_view1 as
select * from department;
create viewdepartment_view2 (name, function, localtion) as
select d_name, function, address fromdepartment;
createalgorithm=merge view worker_view1(name,department, sex, age, address) as
select name, department.d_name,sex,2009-birthday, address from worker, department whereworker.d_id=department.d_id
with local check option;
必须要有SHOW VIEW的权限
DESCRIBE|DESC 视图名 ;
SHOW TABLESTATUS LIKE ‘视图名’ ;
SHOW CREATEVIEW 视图名;
SELECT * FROM information_schema.views ;
CREATE OR REPLACE | ALTER [ ALGORITHM = { UNDEFINED | MERGE | TEMPTABLE } ]
VIEW 视图名 [ ( 属性清单 ) ]
ASSELECT语句
[ WITH [ CASCADED | LOCAL ] CHECKOPTION ] ;
语法和CREATE VIEW基本一样
更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为是视图是一个虚拟表,其中没有数据。通过视图更新时,都是转换到基本表来更新。更新视图时,只能更新权限范围内的数据。超出了范围,就不能更新。
原则:尽量不要更新视图
语法和UPDATE语法一样
哪些视图更新不了:
1、视图中包含SUM(),COUNT()等聚焦函数的
2、视图中包含UNION、UNION ALL、DISTINCT、GROUPBY、HAVING等关键字
3、常量视图
CREATEVIEW view_now AS SELECT NOW()
4、视图中包含子查询
5、由不可更新的视图导出的视图
6、创建视图时ALGORITHM为TEMPTABLE类型
7、视图对应的表上存在没有默认值的列,而且该列没有包含在视图里
8、WITH[CASCADED|LOCAL] CHECK OPTION也将决定视图是否可以更新
LOCAL参数表示更新视图时要满足该视图本身定义的条件即可;
CASCADED参数表示更新视图时要满足所有相关视图和表的条件,默认值。
删除视图时,只能删除视图的定义,不会删除数据
用户必须拥有DROP权限
DROP VIEW [IF EXISTS] 视图名列表 [ RESTRICT | CASCADE]