视图
A、什么是视图
1、含义:MySQL视图时一个虚拟表,其内容有查询定义,同真是的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不存在数据库以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,且在引用视图时动态生成
1.1视图时一张虚拟表
2.2不存在数据,存储查询语句,数据又查询语句动态生成
2、如果我们编写了一个复杂的SQL去完成某些功能,为方便后期的调用,将sql语句封装带一个虚拟表,后期只需要调用虚拟表就可以获取对应SQL查询出的结果,这个虚拟表就叫做视图
3、概念定义:用来创建视图的表加基表
4、视图没有数据,底层基本表的数据搬运工
5、注意点:
1、视图是一个虚拟表
2、不存数据,只存储语句,表中数据有查询语句动态获取
6、好处
1、简单:视图使用起来和表操作非常类似
2、安全:方便进行权限控制(用户只能查询或修改他们在视图所能建到得到的数据,不能看到或用的底层基表的数据)
3、数据独立
总而言之,使用视图的大部分情况是为了保障数据安全性,提高性能查询效率
B、视图的基本用法(可以在视图的基础上再次创建视图)
1、创建视图
关键字:view
语法:create view 视图名 as sql查询语句;
2、使用语法
select * from 视图名;
3、修改视图
a、 关键字 alter--(修改已存在的视图)
语法:alter view 视图名 as sql查询语句;
b、 关键字 replace--(如果十日不存在就创建 存在就修改)
语法:create or replace view 视图名 as sql查询语句;
4、删除语法
关键字: drop
a、语法:drop view 视图名;
b、一次删除多个:drop view 视图名1,视图名2,...;
5、查看视图结构语法
关键字 show create
语法:show create view 视图名;
6、视图更新
a、可以使用更新语句操作视图
b、以下情况不能进行视图更新
a.1 包含以下关键字的sql语句:分组函数、group by 、having、distanct、union和union all
a.2 常量视图
a.3 包含子查询
a.4 如果视图字段不包含基表的非空字段,也是无法进行新增
c、更新限制
c.1 with check option
c.2 对视图的操作无论更新前还是更新后都必须符合查询条件限制
c.3 特别针对
1、有where查询的视图
2、update前后都必须符合where查询条件
3、insert的值必须符合where查询条件
c.4 一旦使用with check option; 来约束视图,那么在视图上更新的数据必须符合视图的查询条件
视图:我们不生成数据,我们只是数据的搬运工