SQL-mysql视图的前世今生-阿里云开发者社区

开发者社区> 数据库> 正文

SQL-mysql视图的前世今生

简介:

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


一 前言

本篇内容是关于视图的一些概念,和使用,主要目的带小伙伴们全面的了解视图,而不是仅仅停留在简单的使用上。

二 视图

2.1 视图的概念

视图其实就是一张虚表,其本质上SQL的检索语句,所以其不储存任何的数据成分;我们使用视图有什么好处呢?

  • 简化查询SQL,直接对视图进行查询,不用管视图具体生成的细节;
  • 可以使用表的部分成为视图,保护数据,开放用户权限时,可以只开放视图,而不开放实体表;
  • 修改数据结构,可以直接对已有的表建立视图,使用不同的表名,字段名称;

我们对视图的操作只能停留在查询上,如果是单表生成的视图还可以进行插入数据;如果是多表关联生成的视图,插入不会起作用;切记任何时候进行关联的时候如果关联3张表以上就是不符合规范,严重的拖累查询性能,视图也是如此,使用复杂的嵌套视图和多表关联也会极大的降低查询性能;

2.2 视图的规范

  • 视图是虚表,其有表的部分特性;视图名 唯一 ,与表名类似;
  • 如果非管理员用户,创建视图必须有创建权限;
  • 视图本质是查询语句,故视图可以嵌套,可以与其它表进行联结;
  • 视图不能有索引和触发器

2.3 视图语句

小伙伴们要记得使用视图之前要看看自己的MYSQL版本,5.0以上支持;

  • 创建视图 与创建表类似 , create view 语句用于创建视图
  • 显示视图创建语句 使用 show create view viewName ;
  • 删除视图 使用语句 drop view viewName
  • 更新视图 使用语句 create or replace view

2.4 视图操作

我们的准备表如下

CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单编号',
  `order_name` varchar(255) DEFAULT NULL COMMENT '订单名称',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `year` year(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

准备数据如下

INSERT INTO `zszxz`.`order`(`id`, `order_name`, `create_time`, `year`) VALUES (1, '知识追寻者的订单', '2020-03-04 11:01:25', 2019);
INSERT INTO `zszxz`.`order`(`id`, `order_name`, `create_time`, `year`) VALUES (2, '小天使的订单', '2020-03-04 11:01:25', 2020);
INSERT INTO `zszxz`.`order`(`id`, `order_name`, `create_time`, `year`) VALUES (3, '流浪者的订单', '2020-03-04 11:02:50', 2020);

新建简单的视图示例如下,使用 order 表 的 id , order_name , year 三个字段组成视图;as 后面就是查询语句,也可以是子查询,多表关联等复杂的查询语句;

create view `zszxz_order` as SELECT `id` , `order_name`, `year` from `order`

查询视图,其使用本质与查询表一样;示例如下

SELECT * from  `zszxz_order`

向视图中插入数据,插入的数据实际在实体表 order 表中切记;

INSERT INTO `zszxz_order`(`order_name`, `year`) VALUES ('小凡汐的订单', 2020);

删除视图

drop view `zszxz_order`

2.5 小结

视图的本质上查询语句,故可以对一些简单的数据统计做成视图是个不错的选择;其次如果是开放权限给第三方公司,使用视图查询部分实体表的数据作为开放的表也是对视图的合理应用;最后,也可以将简单的表联结做成视图,简化开发;

由于视图的本质是查询语句,你可以理解为其前世就是查询,今生就是虚表,徒有其“表”,名不副实,只拥有表的部分功能;

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-06-18
本文作者:知识追寻者
本文来自:“掘金”,了解相关信息可以关注“掘金”

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章