MySQL的视图(view)

一、 什么是视图?

视图(view)是一种虚拟存在的表,视图是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。

二、 为什么要用视图?

  1. 视图隐藏了底层的表结构, 简化了数据访问操作, 客户端不再需要底层表的机构及其之间的关系。

  2. 视图是一个查询结果集, 随实体数据表数据变化而变化。

  3. 视图提供了一个统一访问的接口。(即可以允许用户通过视图访问数据的安全机制, 而不授予用户直接访问底层表的权限), 从而加强了安全性, 使用户只能看到视图所显示的数据。

  4. 视图还可以被嵌套, 一个视图中可以嵌套另一个视图。

注意: 视图总是显示最新的数据!每当用户查询视图时, 数据库引擎通过使用视图的SQL语句重建数据。

三、 MySQL中视图的操作

DROP TABLE IF EXISTS student;
CREATE TABLE `student` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `code` int DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `flag` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

insert into student values(1,100,"小李",1);
insert into student values(2,100,"小李",1);
insert into student values(3,100,"小李",1);
insert into student values(4,101,"小张",0);
insert into student values(5,102,"小孙",0);
insert into student values(6,102,"小孙",0);
insert into student values(7,103,"小赵",0);
1、 创建视图
CREATE VIEW VIEW_STUDENT
AS SELECT * FROM STUDENT
WHERE FLAG = 1
WITH CHECK OPTION;
2、 查看视图
  1. SELECT * FROM VIEW_STUDENT;
    在这里插入图片描述
  2. DESC VIEW_STUDENT;
    在这里插入图片描述
  3. SHOW CREATE VIEW VIEW_STUDENT;
    在这里插入图片描述
3、 修改视图
ALTER VIEW VIEW_STUDENT
AS SELECT * FROM STUDENT
WHERE FLAG = 0
WITH CHECK OPTION;
SELECT * FROM VIEW_STUDENT;

在这里插入图片描述

4、删除视图

DROP VIEW VIEW_STUDENT;

在这里插入图片描述

四、视图的执行顺序

一个视图其实是SELECT语句的集合, 执行会提前编译好, 可以反复使用, 在底层执行顺序和SELECT语句是一样的。

  1. FROM子句组装数据
  2. WHERE子句进行条件筛选
  3. GROUP BY分组
  4. 使用聚合函数进行计算
  5. HAVING筛选分组
  6. 计算所有的表达式
  7. SELECT的字段
  8. ORDER BY排序
  9. LIMIT筛选

五、使用WITH CHECK OPTION约束

对于可以执行DML操作的视图,定义时可以带上WITH CHECK OPTION约束
作用:对视图所做的DML操作的结果,不能违反视图的WHERE条件的限制。
首先我们往表里插入几条数据

insert into student values(8,104,"小马",1);
insert into student values(9,105,"小飞",1);
insert into student values(10,105,"小飞",1);

然后创建视图,获取FLAG为1的数据。

CREATE VIEW VIEW_STUDENT(`自增序号`,`编号`,`名字`,`状态码`)
AS SELECT * FROM STUDENT
WHERE FLAG = 1
WITH CHECK OPTION;

在这里插入图片描述
查询结果集
在这里插入图片描述
使用 UPDATE对视图进行修改

UPDATE VIEW_STUDENT SET `状态码` = 2 WHERE `自增序号` = 1;

在这里插入图片描述
在这里插入图片描述
因为违反了视图中的WHERE FLAG = 1子句,所以抛出异常;
利l用WITH CHECK OPTION约束限制,保证更新视图是在该视图的权限范围之内。

使用WITH CHECK OPTION约束时,(不指定选项则默认是CASCADED)
可以使用CASCADED或者LOCAL选项指定检查的程度:
CASCADED:检查所有的视图,会检查嵌套视图及其底层的视图
LOCAL:只检查将要更新的视图本身,嵌套视图不检查其底层的视图

相关内容

ETL工具kettle的插入更新操作
https://blog.csdn.net/weixin_43932609/article/details/109065366
ETL工具Kettle的发送邮件功能:
https://blog.csdn.net/weixin_43932609/article/details/108766325
ETL工具Kettle的列转行组件:
https://blog.csdn.net/weixin_43932609/article/details/108795244
ETL工具Kettle性能优化:
https://blog.csdn.net/weixin_43932609/article/details/108749304

=========================================================

人生得意须尽欢,莫使金樽空对月!
__一个热爱说唱的程序员。
今日份推荐音乐:Kafe.Hu《经济舱》

=========================================================

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像豆芽一样优秀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值