MySQL 学习<十> 视图

MySQL视图简介


数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列有名称的行和列数据。行和列数据来自由定义视图所查询所引用的表,并且在引用视图时动态生成。
对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而您需要将这些服务器上相似结构的数据组合起来,这种方式就很有用

视图的定义

视图是一个虚拟表,是从数据库中一个或多个表中导出来的表;视图还可以从已经存在的视图的基础上定义。
视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样在数据库中再存储一份,通过视图看到的数据只是存放在基础表中的数据。对视图的操作与对表的操作一样,可以对其进行插叙、修改和删除; 当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化;同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。
为后面示例,先创建两个表:student表和stu_info表;

视图的作用

1.简单。看到的就是需要的,视图不仅可以简化用户对数据的理解,也可以简化他们的操作;将经常用到的查询定义为视图,从而使得用户不必为以后的操作每次指定全部条件。
2.安全。通过视图用户只能查询和修改他们所能见到的数据
3.逻辑数据独立性。视图可以帮助用户屏蔽真实表结构变化带来的影响。


创建视图


基本语法

创建视图基本语法如下:
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子句是对标准SQL的MySQL扩展。ALGORITHM可取三个值:MERGE、TEMPTABLE或UNDEFINED。
如果没有ALGORITHM子句,默认算法是UNDEFINED(未定义的)。算法会影响MySQL处理视图的方式。
MERGE会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。
TEMPTABLE
视图的结果将被置于临时表中,然后使用它执行语句。
UNDEFINED
MySQL自己选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE;这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新的。

在单表上创建视图

举个栗子~
创建一个表并插入数据:
创建视图:


在多表上创建视图

例如,在student表和stu_info上创建视图,如下所示:
同样,先插入数据:


再创建视图如下:



查看视图


查看视图基本信息

1.使用DESCRIBE语句查看视图基本信息,语法如下:
DESCRIBE(DESC) 视图名;

2.使用SHOW TABLE STATUS语句查看视图基本信息,语法如下:
SHOW TABLE STATUS LIKE '视图名';




这里可以看到视图的‘COMMENT’的值为VIEW说明该表为视图,其他的信息为NULL说明这是一个虚表,如果是基本表那么会基表的信息,这是表和视图的区别!

3.使用SHOW CREATE VIEW语句查看视图详细信息,语法如下:
SHOW CREATE VIEW 视图名;

4.在views表中查看视图详细信息,语法如下:
SELECT * FROM information_schema.VIEWS;


修改视图

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]

可以看出,修改视图的语句和创建时的语句是完全一样的;
可以看出,使用CREATE OR REPLACE命令后,相比原来的视图view_t,新的视图view_t少了一个字段。

2.使用ALTER语句修改视图,基本语法如下:
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

VIEW view_name [(column_list)]

AS select_statement

[WITH [CASCADED | LOCAL] CHECK OPTION]

可以看到,只是将关键命令更换成了ALTER。


更新视图


1.使用UPDATE语句更新视图view_t,语法如下:
UPDATE view_t SET qty=5;

示例如下:


可以看到,对视图view_t更新后,基本表t的内容也更新了;同样我们知道,如对基本表更新后,另外一个视图view_t2中的内容也会更新。

2.使用INSERT更新,示例如下:


3.使用DELETE语句删除视图view_t2中的一条记录,示例如下:


这里注意:

当视图中包含如下内容的时候,视图的更新操作将不能被执行

1.视图中包含基本中被定义为非空的列

2.定义视图的SELECT语句后的字段列表中使用了数学表达式

3.定义视图的SELECT语句后的字段列表中使用聚合函数

4.定义视图的SELECT语句中使用了DISTINCT、UNION、TOP、GROUP BY 、HAVING子句


删除视图

基本语法为:
DROP VIEW IF EXISTS 视图名;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值