MySQL教程 - 视图(View)
更新记录
转载请注明出处。
2022年9月3日 发布。
2022年9月3日 从笔记迁移到博客。
说明#
视图是虚拟的表,是一种存储结构
可以对视图进行和表一样的操作,但一般用于查询数据
实际的数据仍存储在表中
注意:
视图不是真实的表,但其外在看起来像表
视图不保存实际数据
视图的作用#
- 简化数据的操作
从多个数据表,方便提取需要的数据 - 对外提供一个统一的接口
计算列的需要,数据库设计范式要求我们减少冗余字段,因此现在很多数据表都没有计算列字段,如采购单:有价格、数量、税率、含税金额,多半没有不含税金额、税额,而这些字段在很多报表中有都会用到,所以我们可以创建一个含有计算列字段的视图来解决这个问题
不同表字段聚合,信息重组,如:经销商通常有业务员,业务员通常有上下级关系(客户经理、区域经理、大区经理等),因此查看经销商业务员时我们需要看到直管业务员是谁?该业务员对应的区域经理、大区经理是谁(可能NULL)?因此我们可以联合经销商表、业务员信息表、业务员上下级关系表定义一个经销商视图 - 增加数据库安全性
安全性需要,主要是早期遗留系统集成需要,如:需要xx系统数据,又没接口,怎么办?直接操作数据库,这时就涉及数据安全性,合理利用视图则可以减少很多授权工作和保证数据安全性。当下新构建的系统几乎都是暴露api接口,因此数据安全性更多关注在接口的身份认证和数据粒度方面 - 兼容老的数据表
曾经碰到过这么个问题。公司自主研发的进销存管理系统,一开始自用的,后来合作伙伴企业也要用,所以打算Saas化,当初做了一个最大的变动就是几乎所有表增加了一个使用单位(co_id)字段。悲催的是另外一个外购系统用到了采购单表,该系统已经停止维护、又继续在用。于是就创建了一个co_id=自有公司的视图,命名为原采购单表,而原采购单表改成新表名。这样一来外购系统可以继续使用,而且数据也没问题
视图的缺点#
首先视图是一个虚表,很多在表上性能优化的手法可能就没有,而且数据库引擎要构建视图有一个过程,类似一个查询,视图的性能以及优化你就不要又太高的要求。你可以把他看作一个查询,而不是一个表真的优化也最好基于查询的优化来优化可能好一些
视图限制#
一般情况下,视图只用于查询使用,而不是用于数据的增删改
视图的增删改语法上和表的增删改相同
注意以下情况视图无法增删改数据:
包含聚合函数SUM()/AVG()/COUNT()/MAX()/MIN()等
视图中包含UNION/UNION ALL/DISTINCT/GROUP BY/HAVING等
包含常量或字符串
SQL语句中包含子查询
由视图导出的视图
ALGORITHM为TEMPTABLE类型
所以视图最好是用于查询,而不是增删改
定义视图/创建视图#
CREATE [ALGORITHM={UNDEFINED | MERGE | TEMPTABLE}]
VIEW [(自定义属性名....)]
AS SQL语句
[WITH [CASACED|LOCAL] CHECK OPTION];
查看视图#
DESC 视图名;
SHOW CREATE VIEW 视图名;
修改视图#
CREATE OR REPLACE [ALGORITHM = UNDEFINED|MERGE|TEMPTABLE]
VIEW 视图名 [(属性)]
AS SQL语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
或者
ALTER [ALGORITHM = UNDEFINED|MERGE|TEMPTABLE]
VIEW 视图名 [(属性)]
AS SQL语句
[WITH CASCADED|LOCAL CHECK OPTION];
删除视图#
DROP VIEW [IF EXISTS] 视图名;
注意:删除视图之前记得检查是否有其他视图依赖该视图。
作者:重庆熊猫
出处:https://www.cnblogs.com/cqpanda/p/16652019.html
版权:本作品采用「不论是否商业使用都不允许转载,否则按3元1字进行收取费用」许可协议进行许可。
本文来自博客园,作者:重庆熊猫,转载请注明原文链接:https://www.cnblogs.com/cqpanda/p/16652019.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!