mysql笔记:8. 视图


数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的列和行数据。行和列数据来自定义视图的查询所引用的表,并且在引用视图时动态生成。

创建视图

创建视图的语法和创建表的语法基本是一样的,格式如下:

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;
  • 22
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值