数据库视图的使用
1.视图的概念
从一个或多个表导出的虚拟的表,内容由具体的查询内容定义。
从用户视角看,一个视图是从一个特定的角度来查看数据库中的数据;从数据库内部看,一个视图是由SELECT语句组成的查询定义的虚拟表。视图和普通表的结构相同,但不实现数据的存储,仅可以查,不能增删改。
一般出于以下角度使用视图:
a.简化操作:将常用的聚合函数或多表查询这些查询语句放到视图中,简化了操作,每次只要select * from view就可以了;
b.安全性:只让用户查看部分数据,同时,用户无法对视图进行随意的修改和删除,增加了安全性。
2.创建语法
CREATE VIEW 'new_view' AS (select语句) ;
3.常见视图场景
1) 多表查询(同一个库下)
如果日常工作经常会用到多表查询,可以针对该多表查询的select的语句,专门创建一个视图。例如,现有
表student:id, Sname, Sage, Sheight, Saddresss
表course:id, Cname
表grade:id, S_id, C_id, score
日常查询中,经常需要多表查询,以展示学生姓名、课程名称、成绩字段,可以创建如下视图:
CREATE VIEW 'student_score' AS
SELECT Sname, Cname, score FROM student
JOIN grade on student.id = grade.S_id
JOIN course on course.id = grade.C_id;
以后每次使用,直接进入左侧的views中即可查看。
2) 分表存储时的查询(同一个库下)
如果开发过程中采用了分表存储,比如公司现有的项目为了提升性能,对订单order表采用了分表存储,通过雪花算法后随机存储在64个表之中的1个表中。为了方便平时的查询,可以新建一个视图。假设order表中有以下字段:
id, order_no, driver_id, status, created_at
创建视图的语句如下:
CREATE VIEW `order_view` AS
select * from order_1
union all (select * from order_2)
union all (select * from order_3)
3) 跨库查询
CREATE VIEW 数据库1.v as (select * from 数据库1.table1) union all (select * from 数据库2.table2);
4) 跨服务器查询
待补充。