当前位置: 首页 > news >正文

[MySQL]视图

视图是什么 

     视图(View)是一种虚拟存在的表。视图中的数据,来自定义视图的查询语句中,使用的表,并且是在使用视图时动态生成的。

     简单讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。

为什么要使用视图(视图的作用)

1.简化查询语句

    与Java等语言中的方法一样,对于重复使用到的查询语句(比如作为子查询,代表一个列或者用于WHERE的条件判断),可以将其定义成视图。这样子使用时就直接调用视图即可,项目越大,越能简化查询语句。

2.保护数据安全

    表可以授权,但不能授权到 特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据,也能帮用户屏蔽真实表结构变化带来的影响 。如果你想让别人只能看到一张表中的个别字段的数据,此时就会使用到视图。

视图的基本操作

# 创建视图
CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION ];# 查看视图的创建语句
SHOW CREATE VIEW 视图名称;# 查询视图中的数据
SELECT 字段名 FROM 视图名称 ...;//与查询表的语句一样# 修改视图
# 方式一:直接覆盖
CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION ] 
# 方式二:修改
ALTER VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]# 删除视图
DROP VIEW [IF EXISTS] 视图名称 [,视图名称] ...

    注意,想要使视图能够更新,视图中的行与基础表中的行之间必须存在一对一的关系。  

    视图包含以下任何一项,则该视图不可更新:

A. 聚合函数或窗口函数(SUM()、 MIN()、 MAX()、 COUNT()等)B. DISTINCTC. GROUP BYD. HAVINGE. UNION 或者 UNION ALL

检查选项 

    当使用WITH CHECK OPTION子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如 插入、更新、删除,以使其符合视图的定义。 MySQL还允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,mysql提供了两个选项:

    CASCADED 和 LOCAL,默认值为 CASCADED 。

CASCADED:假设有两个视图为v1和v2。v2是基于v1创建的,如果v2的检查规则定义为CASCADED(或者未指定,则默认也为CASCADED)。此时,使用v2插入数据时,不仅会检查v2的检查条件,还会检查v1的检查条件

CREATE OR REPLACE VIEW v1 AS SELECT empno,ename,sal FROM emp_back WHERE sal<=2000;CREATE OR REPLACE VIEW v2 AS SELECT  empno,ename,sal FROM v1 WHERE sal>=1000
WITH CASCADED CHECK OPTION;INSERT INTO v2 VALUES(8080,'TOM',1888);
INSERT INTO v2 VALUES(8081,'MARY',2500);

    执行上述代码时,8080可以插入成功,但是8081插入不会成功。虽然8081的sal为2500,满足v2的sal>=1000,但是不满足v1的sal<=2000,所以插入不成功。

LOCAL: 执行检查时,只会检查v2,不会检查v2的关联视图v1

将之前v2的CASCADED修改为LOCAL,此时就可以发现,8081可以插入成功了,因为它不再检查v1的sal<=2000。

http://www.lryc.cn/news/478846.html

相关文章:

  • Windows Server2012 R2搭建NFS服务器
  • SQL题:使用hive查询各类型专利top 10申请人,以及对应的专利申请数
  • 使用sealos部署的集群在部署metrics-server时日志x509
  • WPF怎么通过RestSharp向后端发请求
  • promise的用法以及注意事项,看了这篇你就会了
  • vue3如何使用pinia设置全局状态,附常见面试题
  • lerna+umi ‘max‘ 不是内部或外部命令,也不是可运行的程序
  • 美格智能5G车规级通信模组: 5G+C-V2X连接汽车通信未来十年
  • 「C/C++」C/C++ 指针篇 之 指针运算
  • 计算机网络网络层笔记
  • 长亭那个检测能力超强的 WAF,出免费版啦
  • rabbitMQ RabbitTemplate 发送消息
  • 本系列是《10万字208道Java经典面试题总结(附答案)》的2024修订版。
  • C语言文件基础概念的理解(一)
  • C++ lambda 匿名函数
  • 基于python的简单web服务器示例
  • 02- 模块化编程-006 ADC0808数码显示对比
  • 又发现了Mac妙控鼠标的新使用方法
  • Webserver(4.6)poll和epoll
  • LVGL 与 QT
  • 如何选择最适合的项目管理软件?2024年大厂首选7款工具盘点
  • 【数据结构】选择排序——选择排序 和 堆排序
  • P11229 [CSP-J 2024] 小木棍
  • 【学习笔记】SAP ABAP——OPEN SQL(一)【SELECT语句】
  • SQL注入(1)
  • 在AI时代,如何解决人的工作岗位被AI替代的问题?
  • Linux命令--paste
  • 数据结构模拟题[九]
  • 2024年10月国产数据库大事记-墨天轮
  • Andon 业务流程业务开发陷阱----从真实用户与管理者视角逻辑差异