mySQL-视图

视图

1.1 概念

1. 视图是 MySQL 在 5.0.1 版本中加入的功能。它可以理解为一个虚表。
2. 之所以被称为虚表,是因为它只是存储了一个结构,并不存储真实的数据。它的数据是在查询过程中动态生成的。 
3. 视图并不是真的优化

1.2 创建视图

视图 只是存储了一个结构,并不存储真实的数据。
-- 创建视图 
create VIEW user_view as select id,user_name,email from `user`;

1.3 查看视图

和表一样,我们可以用 desc 视图名;来查看视图的每一列
desc user_view;
-- 查看创建的视图语法
show create view user_view; 
-- 查询视图内容 
select * from user_view;

在这里插入图片描述

1.4 视图优点

1. 第一个显著优点就是它简化了操作。此时我们完全不用关心视图是怎么处理数据的,我们只需要知道如何使用这个结果集即可,视图相当于一个中间层。 
2.第二个显著优点就是它更加安全。比如我们可以让用户有权去访问某个视图,但是不能访问原表,这样就可以起到保护原表中某些数据的作用。 
2. 我们之后会接触到管理权限,权限是无法细致到某一个列的,通过视图,则很容易实现。 
3. 第三个显著优点就是降低耦合。假如我们以后要修改原表的结构,那么我们可以通过修改视图的定义即可,而不用修改应用程序,对访问者是不会造成影响的,一般来说,这样代价会更小。 

1.5 视图缺点

1. 表结构修改则需要手动修改视图

1.6 视图IUD

表是可以更新数据的,这里的更新,指的是”增删改”,但是对于视图来说 不一定。
update `user` set email = 00 where id = 12; 
select * from user_view; 
-- 删除视图 
DROP VIEW user_view_2;

以下是视图不可更新的情况
1. 包含聚合函数、distinct、group by、having、union、union all。
2. 常量视图。
3. select 包含子查询。
4. 包含连接操作。
5. from 一个不能更新的视图。
6. where 子句的子查询引用了 from 子句中的表。

创建一个新的视图
create view user_view_2 as select id,user_name,password,email,status from `user` where status = 0; 
select * from user_view_2;
现在如果给这个视图新增数据 status = 1;
insert into user_view_2(id, user_name, password, email, status) values (30, '221', '12', '12', 1); 
select * from user_view_2; 
select * from `user`;

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

with check option
  1. 对于上面的表 t2,我们想:是否可以创建一个视图,它只允许修改满足本视图要求的数据,而对于不满足本视图要求的数据操作, 统统拒绝呢?
  2. 答案是肯定的。那就需要 with check option 了,不过该修饰符还有更加深一步的权限机制。
  3. 首先我们还是利用上一步的 t2,我们创建一个视图 v3,它的创建
    DROP VIEW user_view_2; create view user_view_2 as select id,user_name,password,email,status fromuserwhere status = 0 with check option; insert into user_view_2(id, user_name, password, email, status) values (31, '221', '12', '12', 1);
错误信息

[Err] 1369 - CHECK OPTION failed ‘community.user_view_2’
这里可以理解为 with check option 的作用就是多了一个 check 的功能,即检查的功能,也就是说插入的数据必须满足该视图的条件,才允许被操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值