一 前言
本篇内容是关于视图的一些概念,和使用,主要目的带小伙伴们全面的了解视图,而不是仅仅停留在简单的使用上
学习本篇的基础是知识追寻者发过SQL的系列文章,知识追寻者的目标是MYSQL系列知识直接安排,不管是学习和工作,学了直接能用;(公众号读者看专辑)
公众号:知识追寻者
知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)
二 视图
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 小结
视图的本质上查询语句,故可以对一些简单的数据统计做成视图是个不错的选择;其次如果是开放权限给第三方公司,使用视图查询部分实体表的数据作为开放的表也是对视图的合理应用;最后,也可以将简单的表联结做成视图,简化开发;
由于视图的本质是查询语句,你可以理解为其前世就是查询,今生就是虚表,徒有其“表”,名不副实,只拥有表的部分功能;
关注知识追寻者: