MySQL视图(十)
视图
- 数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的行和列数据。行和列数据来自由定义视图查询所引用的表。
视图概述
- 在视图中用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE和DELETE修改记录。
视图的含义
- 视图是一个虚拟表,是从数据库中一个或多个表中导出来的表。视图还可以从已经存在的视图的基础上定义。
- 视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。
- 当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化;同时,若基本表的数据发生变化,则这种变化也可以自动反映到视图中。
视图的作用
- 简单化
- 安全性
- 逻辑数据独立性
创建视图
创建视图的语法形式
-
创建视图使用CREATE VIEW语句,基本语法格式如下:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE} ] VIEW view_name [(column_list)] AS SELECT_statement [WITH [CASCADED | LOCAL] CHECK OPTION];
其中,CREATE表示创建新的视图;REPLACE表示替换已经创建的视图;
ALGORITHM表示视图选择的算法;
view_name为视图的名称,column_list为属性列;
SELECT_statement表示SELECT语句;
WITH [CASCADED | LOCAL] CHECK OPTION参数表示视图在更新时保证在视图的权限范围之内。
- ALGORITHM的取值:
- UNDEFINED:表示MySQL将自动选择算法
- MERGE:表示将使用的视图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分
- TEMPTABLE:表示将视图的结果存入临时表,然后用临时表来执行语句
- CASCADED与LOCAL
- CASCADED:默认值,表示更新视图时要满足所有相关视图和表的条件
- LOCAL:表示更新视图时满足该视图本身定义的条件即可
- ALGORITHM的取值:
在单表上创建视图
- MySQL可以在单个数据表上创建视图。
在多表上创建视图
- MySQL中也可以在两个或者两个以上的表上创建视图,可以使用CREATE VIEW语句实现。
查看视图
- 查看视图是查看数据库中已存在的视图的定义。查看视图必须要有SHOW VIEW权限,MySQL数据库下的user表中保存着这个信息。
使用DESCRIBE语句查看视图基本信息
-
DESCRIBE
可以用来查看视图,具体的语法如下:DESCRIBE 视图名;
使用SHOW TABLE STATUS语句查看视图基本信息
-
查看视图的信息可以通过
SHOW TABLE STATUS
的方法,具体的语法如下:SHOW TABLE STATUS LIKE '视图名';
执行结果除了Comment的值为VIEW,其他的信息均为NULL,说明这是一个虚表。
使用SHOW CREATE VIEW语句查看视图详细信息
-
使用
SHOW CREATE VIEW
语句可以查看视图详细定义,语法如下:SHOW CREATE VIEW 视图名;
在VIEWS表中查看视图详细信息
-
在MySQL中,information_schema数据下的views表中存储了所有视图的定义。通过对views表的查询,可以查看数据库中所有视图的详细信息,查询语句如下:
SELECT * FROM information_schema.views WHERE TABLE_NAME = '视图名';
修改视图
- 当基本表的某些字段发生变化时,可以通过修改视图来保持与基本表的一致性。
使用CREATE OR REPLACE VIEW语句修改视图
-
在MySQL中修改视图可以使用
CREATE OR REPLACE VIEW
语句,语法如下:CREATE OR REPLACE [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE} ] VIEW view_name [(column_list)] AS SELECT_statement [WITH [CASCADED | LOCAL] CHECK OPTION];
修改视图的语句和创建视图的语句是完全一样的。当视图已经存在时,修改语句对视图进行修改;当视图不存在时,创建视图。
使用ALTER语句修改视图
-
ALTER语句是MySQL提供的另外一种修改视图的方法,语法如下:
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE} ] VIEW view_name [(column_list)] AS SELECT_statement [WITH [CASCADED | LOCAL] CHECK OPTION];
更新视图
-
更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。基本操作语句与更新表相同。
-
当视图中含有如下内容时,视图的更新操作将不能被执行:
(1)视图中不包含基表中被定义为非空的列。
(2)在定义视图的SELECT语句后的字段列表中使用了数学表达式。
(3)在定义视图的SELECT语句后的字段列表中使用了聚合函数。
(4)在定义视图的SELECT语句中使用了DISTINCT、UNION、TOP、GROUP BY或HAVING子句。
删除视图
-
删除一个或多个视图可以使用DROP VIEW语句,语法如下:
DROP VIEW [IF EXISTS] view_name [,view_name]... [RESTRICT | CASCADE];