文章目录
- 创建视图
- 修改视图
- 删除视图
- 通过视图更新数据
- 1. 插入数据
- 2. 更新数据
- 3. 删除数据
- 查看视图信息
- 1. DESCRIBE
- 2. SHOW TABLE STATUS
- 3. SHOW CREATE VIEW
- 4. 在views表中查看
数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的列和行数据。行和列数据来自定义视图的查询所引用的表,并且在引用视图时动态生成。
创建视图
创建视图的语法和创建表的语法基本是一样的,格式如下:
CREATE [OR REPLACE] [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED|LOCAL] CHECK OPTION];
上述语句可能创建新的视图,如果给定了OR REPLACE子句,该语句还能替换已有的视图。select_statement是一种SELECT语句,它给出了视图的定义,它可以从基表或其他视图进行选择。
参数含义:
- ALGORITHM:可选参数,表示视图选择的算法。
- UNDEFINED:MySQL将自动选择要使用的算法。
- MERGE:将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。
- TEMPTABLE:将视图的结果存入临时表,然后使用临时表执行语句。
- WITH CHECK OPTION:可选参数,表示更新视图时要保证在视图的权限范围内。
- CASCADED:更新视图时要满足所有相关视图和表的条件才进行更新。
- LOCAL:更新视图时,要满足该视图本身定义的条件即可更新。
创建视图语句要求具有针对视图的CREATE VIEW权限,以及针对由SELECT语句选择的每一列上的某些权限。
对于在SELECT语句中其他地方使用的列,必须具有SELECT权限。
如果有OR REPLACE子句,必须在视图上具有DROP权限。
表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视图。
视图必须具有唯一的列名,不得有重复,就像基表那样。默认情况下,由SELECT语句检索的列名将用作视图列名。如果想为视图列定义明确的名称,可使用可选的column_list子句,列出由逗号隔开的ID。column_list中的名称数目必须等于SELECT语句检索的列数。
SELECT语句检索的列可以是对表中列的简单引用 ,也可以是使用函数、常量值、操作符等的表达式。
修改视图
除了使用CREATE OR REPLACE VIEW修改视图外,也可以使用ALTER修改视图,语法如下:
ALTER [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED|LOCAL] CHECK OPTION];
删除视图
数据库中的任何对象都会占用数据库的存储空间,视图也不例外。当视图不再使用时,要及时删除数据库中多余的视图。
DROP VIEW [schema_name.]view_name1, view_name2, ...;
视图一旦删除,就不可恢复,所以要谨慎操作。
通过视图更新数据
通过视图更新数据是指通过视图来插入、更新、删除表中的数据,通过视图更新数据的方法有3种,分别是INSERT、UPDATE和DELETE。视图是一个虚拟表,其中没有数据。因此,通过视图更新数据时都是转到基表进行更新的。
1. 插入数据
使用INSERT语句可以向单个基本表组成的视图中插入数据,而不能向两个表或多个表组成的视图中插入数据。
INSERT INTO view_name VALUES(value1, value2, ...);
2. 更新数据
UPDATE view_name SET name1=value1, name2=value2, ... where_statement;
3. 删除数据
DELETE FROM view_name where_statement;
查看视图信息
1. DESCRIBE
使用DESCRIBE语句不仅可以查看数据表的基本信息,还可以查看视图的基本信息。视图也是一个表,它是一个虚拟表。
DESCRIBE view_name;
# 等价
DESC view_name;
2. SHOW TABLE STATUS
SHOW TABLE STATUS LIKE 'view_name';
3. SHOW CREATE VIEW
使用SHOW CREATE VIEW可以查看视图元信息,语法如下:
SHOW CREATE VIEW view_name;
4. 在views表中查看
在MySQL中,所有视图的定义都存在information_schema数据库下的views表中。查询该表,可以查看数据库中所有视图的详细信息,语法如下:
SELECT * FROM information_schema.views;