1.Mysql视图

江枫思渺然 提交于 2020-03-05 23:10:56

视图

1.概念

1.视图是一个虚表,Mysql版本5.0.1后才加入的
2.虚表:它只是一个存储过程,没有真实是数据。他的数据是在查询过程中生成的
3.视图不是优化Mysql

2.创建查看视图

2.1 创建视图

create VIEW 视图名称 as select 字段名 from `表名`;

2.2 查看视图

desc user_view;
-- 查看创建的视图语法 
show create view user_view; 
-- 查询视图内容 
select * from user_view;

3.视图优缺点

优点:
1.视图简化了操作。程序员不需要知道如何获取数据,只需要使用视图,视图就是一个中间件。
2.视图更加安全。不会暴露表结构。
3.视图可以作为管理权限,可以细致到某一列。
4.降低了系统与数据库的耦合程度。假如我们以后要修改原表的结构,那么我们可以通过修改视图的定义即可,而不用修改应用程序,对访问者是不会造成影响。

缺点:
1.表结构修改必须手动修改视图

4.视图拓展

4.1 表数据是可以更新(增删改)的,但是对于视图来说***不一定***。

update `user` set email = 00 where id = 1;
select * from user_view; 
-- 删除视图 
DROP VIEW user_view;

4.2 视图不可更新情况

    a.包含聚合函数:group by、 unio、unio all、distinct、having。
	b.select包含子查询
	c.from一个不能更新的视图
	d.where子句的子查询引用了fron子句中的表
	e.常量视图

4.3 视图插入数据

创建新视图

create view user_view_1 as select id,user_name,password,email,status from `user` where status = 0; 

select * from user_view_1;

现在如果给这个视图新增数据 status = 1;

insert into user_view_1(id, user_name, password, email, status) values (30, '221', '12', '12', 1); 

select * from user_view_1;

select * from `user`;

你会发现我们可以向该视图插入数据,它不满足本视图的要求,但是数据可以插入基表了

··

4.4 with check option
是否可以创建一个视图,它只允许修改满足本视图要求的数据,而对于不满足本视图要求的数据操作,统统拒绝呢?

DROP VIEW user_view_1; 
create view user_view_1 as select id,user_name,password,email,status from `user` where status = 0 with check option;

insert into user_view_1(id, user_name, password, email, status) values (31, '221', '12', '12', 1);
错误信息 [Err] 1369 - CHECK OPTION failed 'community.user_view_1'

这里可以理解为 with check option 的作用就是多了一个 check 的功能,即检查的功能,
也就是说插入的数据必须满足该视图的条件,才允许被操作。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!