一、视图
1、概念
视图是由数据库中的一个表或多个表导出的虚拟表,是一种虚拟存在的表,方便用户对数据的操作。
2、视图的作用
(1)、简单性
看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
(2)、安全性
视图的安全性可以防止未授权用户查看特定的行或列,使有权限用户只能看到表中特定行的方法,如下:
-
在表中增加一个标志用户名的列。
-
建立视图,使用户只能看到标有自己用户名的行。
-
把视图授权给其他用户。
3、逻辑数据独立性
视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,程序一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。视图可以在以下几个方面使程序与数据独立。
(1)、如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而使应用程序可以不动。
(2)、如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表不动。
(3)、如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而使应用程序可以不动。
(4)、如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而使数据库可以不动。
二、创建视图
1、查看创建视图的权限
SELECT Select_priv,Create_view_priv FROM mysql.user WHERE user="用户名";
比如查询MySQL中root用户是否具有创建视图的权限
SELECT Select_priv,Create_view_priv FROM mysql.user WHERE user="root";
2、创建视图
创建视图语法:
CREATE [OR REPLACE] [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEW 视图名[(属性清单)]
AS SELECT语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
比如在数据表student中创建view视图,并将其命名为student_view视图,设置属性为a,b,c
CREATE VIEW
student_view(a,b,c)
AS SELECT name,age,sex
FROM student;
创建视图存在如下注意事项:
(1)、运行创建视图的语句需要用户具有创建视图(CRATE VIEW)的权限,若加了[OR REPLACE]时,还需要用户具有删除视图(DROP VIEW)的权限;
(2)、SELECT语句不能包含FROM子句中的子查询;
(3)、SELECT语句不能引用系统或用户变量;
(4)、SELECT语句不能引用预处理语句参数;
(5)、在存储子程序内,定义不能引用子程序参数或局部变量;
(6)、在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句;
(7)、在定义中不能引用TEMPORARY表,不能创建TEMPORARY视图;
(8)、在视图定义中命名的表必须已存在;
(9)、不能将触发程序与视图关联在一起;
(10)、在视图定义中允许使用ORDER BY,但是,如果从特定视图进行了选择,而该视图使用了具有自己ORDER BY的语句,它将被忽略。
三、查看视图
1、DESCRIBE语句
DESCRIBE view_name;
2、SHOW TABLE STATUS语句
SHOW TABLE STATUS LIKE 'view_name';
3、SHOW CREATE VIEW语句
SHOW CREATE VIEW view_name;
四、修改视图
1、CREATE OR REPLACE VIEW语句
基本语法:
CREATE [OR REPLACE] [ALGORITHM={UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]]
修改book视图
CREATE OR REPLACE VIEW book AS SELECT * FROM student;
2、ALTER
基本语法:
ALTER [ALGORITHM={UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
修改book视图
ALTER VIEW book AS SELECT name FROM student;
五、更新视图
#更新school_view视图中,age字段对应的数据值,将字段值改为12
#先查看book视图中age字段对应的信息
select b_age from school_view;
#使用UPDATE语句,更新age字段对应的信息
UPDATE school_view SET b_age=12;
六、删除视图
DROP VIEW IF EXISTS view_name;