MySQL 视图

视图是一个虚拟表,不存放任何数据。


实现:

MySQL可以使用合并算法临时表算法来实现视图。

如果视图中包含group by、distinct、任何聚合函数、union、子查询等,只要无法再原表记录和视图记录中建立一一映射的场景中,MySQL都将使用临时表算法实现视图。

合并算法:将视图SQL和查询SQL进行合并,查询结果返回到客户端

临时表算法:将视图SQL进行查询,返回的结果集存放到临时表,再使用查询SQL进行查询,最终返回结果到客户端

查看到底是使用哪种算法:

explain select * from view_name;

如果select_type为 DERIVED 说明视图是采用临时表算法实现的,SIMPLE则为合并算法。


限制:

  • 不支持物化视图(指将视图结果数据存放在一个可以查看的表中)
  • 不支持在视图中创建索引
  • 不会保存视图定义的原始SQL语句

创建视图

create view view_name as 
select * from table_name;

修改视图

ALTER
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = { user | CURRENT_USER }]
    [SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

删除视图

DROP VIEW [IF EXISTS]   
view_name [, view_name] ...

可更新视图

定义视图的select语句不能包含以下任何元素:

聚合函数,如:min,max,sum,avg,count等。
DISTINCT子句
GROUP BY子句
HAVING子句
左连接或外连接。
UNION或UNION ALL子句
SELECT子句中的子查询或引用该表的where子句中的子查询出现在FROM子句中。
引用FROM子句中的不可更新视图
仅引用文字值
对基表的任何列的多次引用

update view_name set col = new_value where ...;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值