1.Mysql视图

视图

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子句的子查询引用了from子句中的表
	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 的功能,即检查的功能,
也就是说插入的数据必须满足该视图的条件,才允许被操作。

发布了3 篇原创文章 · 获赞 0 · 访问量 76

猜你喜欢

转载自blog.csdn.net/zqy_CSDN_name/article/details/104674099