视图
- 数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的行和列数据。行和列数据来自由定义视图查询所引用的表。
视图概述
- 在视图中用户可以使用 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];
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于