视图
视图通俗是企业想展示给用户看的,数据库存储的数据有很多,但是也有很多是不能对外公开的,做项目的过程就通过视图这个媒介达到这种效果
视图也可以保证数据库表结构字段的隐私安全等
create or replace view stu_v_1 as select id studentName as name from student where id <= 10;
用户只能更改视图中展现的数据,并且不允许用户去修改表的字段,更加安全
基本语法
# 视图创建
create [or replace] view 视图名 as select …… from …… [with [cascaded | local] check option]
# 视图查询
show create view 视图名 # 查看创建语句
select * from 视图名 # 查看数据
# 视图修改
# 方式一
create or replace view 视图名 as select …… from …… [with [cascaded | local] check option] # 重新更新视图名
# 方式二
alter view 视图名 as select …… from …… [with [cascaded | local] check option] #alter 声明修改表类似
# 视图删除
drop view [if exists] 视图名
视图创建
create or replace view stu_v_1 as select name,age from student where id <= 10;
视图查询
show create view stu_v_1;
select * from stu_v_1 where id <= 10;
视图修改
# 方式一
create or replace view stu_v_1 as select name,age,tel from student where id >= 20;
alter view stu_v_1 as select name,age,tel from student where id >= 20;
视图删除
drop view if exists stu_v_1;
检查选项
用where时,不符合条件的数据可以插入表,但是视图不会展示
检查选项,避免插入不符合 条件数据,即数据不会插入表
cascaded 联结,检查选项对当前视图作用 且 前无检查选项的视图默认检查
local 本地检查,检查选项仅对当前视图作用
mysql可以根据一个视图创建另一个视图,并且两个视图的限制条件会结合起来
cascaded特点
前视图没有添加检查语句,但是后视图基于前视图,用了cascaded,则会给前视图默认添加检查选项,添加数据时,如果id>20会报错
local特点
视图更新
视图创立后,插入数据,有些 “客观” 数据不允许对其进行修改
A. 聚合函数或窗口函数(SUM()、 MIN()、 MAX()、 COUNT()等)
B. DISTINCT
C. GROUP BY
D. HAVING
E. UNION 或者 UNION ALL
create view stu_v_1 as select count(*) from student;
# "客观" 数据不允许修改
insert into stu_v_1 values(10); # 插入其他数字
视图总
视图理解1
创建视图,展示表,视图被算入其中,所以命名要注意规范
视图是基于表的数据
用第一种方式修改视图
create or repalce view emp_v_1 as select id,name,age from emp where id <= 18;
# 插入张三相关信息 到 emp表
insert into emp values(4,'李四',20,'销售','2000','2020-01-02',14,4);
# 再次查询
select * from emp_v_1;
视图理解2
在刚刚基础上添加检查选
create or repalce view emp_v_2 as select id,naem,age from emp_v_1 where id >= 10 with cascaded check option
# 插入数据到 emp表
insert into emp values(19,'李四',20,'销售','2000','2020-01-02',14,4);
# id为19 ,超过emp_v_1 范围
直接插入表不符条件数据不受视图检查选项影响,视图不会将其展示。
如果是将数据通过插入到视图 插入到emp表,则会报错