[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.mzph.cn/bicheng/59619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python进阶之IO操作

文章目录 一、文件的读取二、文件内容的写入三、之操作文件夹四、StringIO与BytesIO 一、文件的读取 在python里面&#xff0c;可以使用open函数来打开文件&#xff0c;具体语法如下&#xff1a; open(filename, mode)filename&#xff1a;文件名&#xff0c;一般包括该文件所…

《安富莱嵌入式周报》第345期:开源蓝牙游戏手柄,USB3.0 HUB带电压电流测量,LCR电桥前端模拟,开源微型赛车,RF信号扫描仪,开源无线电收发器

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 本周更新一期视频教程 第5期&#xff1a;RTX5/FreeRTOS全家桶源码工程综合实战模板集成CANopen组件&#xff08;2024-1…

「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图

Canvas 组件在鸿蒙应用中用于绘制自定义图形&#xff0c;提供丰富的绘制功能和灵活的定制能力。通过 Canvas&#xff0c;可以创建矩形、圆形、路径、文本等基础图形&#xff0c;为鸿蒙应用增添个性化的视觉效果。本篇将介绍 Canvas 组件的基础操作&#xff0c;涵盖绘制矩形、圆…

用流量策略做多出口实验

一、拓扑&#xff1a; 二、配置过程&#xff1a; 1、配置 IP 地址&#xff0c;配置动态路由协议 OSPF 2、AR2 上&#xff0c;配置高级 ACL&#xff0c;允许 ospf 流量、1 到 6、2 到 8、deny 所有 3、写流分类&#xff0c;抓取流量特征 4、写流行为&#xff0c;配置流量动作 5、…

【Golang】sql.Null* 类型使用(处理空值和零值)

sql.NullString 和 sql.NullInt64 类型&#xff08;以及其他类似的 sql.Null* 类型&#xff09;在处理数据库操作时非常有用&#xff0c;尤其是在 Go 语言的 database/sql 包中。它们的主要用途包括&#xff1a; 表示 NULL 值&#xff1a; 在数据库中&#xff0c;NULL 表示“没…

HTML 鼠标滑动 页面的header背景从透明色变为黑色

要实现当鼠标滑动时&#xff0c;页面的header背景从透明色变为黑色&#xff0c;你可以使用JavaScript来监听滚动事件&#xff0c;并根据页面的滚动位置来改变header的背景颜色。 <!DOCTYPE html> <html lang"en"> <head> <meta charset"U…

【前端】如何在 JSX 中使用条件语句和循环

在 JSX 中使用条件语句和循环是常见的需求&#xff0c;尤其是在构建动态用户界面时。以下是如何在 JSX 中使用条件语句和循环的详细说明。 条件语句 1. 三元运算符 三元运算符是最简单的条件语句形式&#xff0c;适用于简单的条件判断。 const isLoggedIn true;const ele…

Scala 的访问权限

1.1 Scala的访问权限概述 Scala中的属性成员、方法和构造器这三种变量可以通过访问控制符控制访问权限。不同的访问控制符可以决定是否可以被外部类访问。由于局部方法的作用域本身有局限&#xff0c;所以不需要使用访问控制符修饰局部方法。属性成员、方法和构造器的访问控制权…

标准化和归一化

标准化和归一化的概念 **标准化&#xff08;Standardization&#xff09;和归一化&#xff08;Normalization&#xff09;**是两种常见的数据预处理方法&#xff0c;旨在将特征数据转换为具有某种标准尺度的格式&#xff0c;以帮助模型更有效地学习。 1. 标准化&#xff08;S…

Rust移动开发:Rust在Android端集成使用介绍

Andorid调用Rust 目前Rust在移动端上的应用&#xff0c;一般作为应用sdk的提供&#xff0c;供各端使用&#xff0c;目前飞书底层使用Rust编写通用组件。 该篇适合对Android、Rust了解&#xff0c;想看如何做整合&#xff0c;如果想要工程源码&#xff0c;可以评论或留言有解疑…

UE hard/soft reference| DDX DDY | Unity pcg color

目录 1.虚幻引擎性能优化 &#xff08;附0跳转Unity对应机制&#xff09; hard reference and soft reference 1. 硬引用&#xff08;Hard Reference&#xff09; 2. 软引用&#xff08;Soft Reference&#xff09; 3. 使用原则 2.空间梯度转法线 DDX DDY节点 ​编辑 …

嵌入式开发之静态库和共享库

静态库 静态库的特点: 默认执行库链接的时候,检索的是Linux的/lib、/usr/lib目录下,如果指定gcc -c .... -L 指定路径 -l指定库文件;c语言分为预编译、编译、汇编、链接四个步骤。链接的时候是把依赖库文件函数的代码拷贝到程序里面,即便是删除库文件。拷贝后的程序依旧…

【UE5】一种老派的假反射做法,可以用于移动端,或对反射的速度、清晰度有需求的地方

没想到大家这篇文章呼声还挺高 这篇文章是对它的详细实现&#xff0c;建议在阅读本篇之前&#xff0c;先浏览一下前面的文章&#xff0c;以便更好地理解和掌握内容。 这种老派的假反射技术&#xff0c;适合用于移动端或对反射效果的速度和清晰度有较高要求的场合。该技术通过一…

前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)

一、相对定位 使用相对定位的盒子会相对于自身原本的位置&#xff0c;通过偏移指定的距离&#xff0c;到达新的位置。盒子的本体仍处于文档流中。使用相对定位&#xff0c;除了要将 position 属性值设置为 relative 外&#xff0c;还需要指定一定的偏移量。其中&#xff0c;水…

【ChatGPT】让ChatGPT生成跨语言翻译的精确提示

让ChatGPT生成跨语言翻译的精确提示 在跨语言交流中&#xff0c;为了确保翻译的准确性&#xff0c;生成精确的提示&#xff08;Prompt&#xff09;来指导ChatGPT翻译内容是至关重要的。无论是要处理复杂的技术术语、俚语&#xff0c;还是保持特定的语言风格&#xff0c;使用有…

PostgreSQL 页文件损坏

PostgreSQL 提示 ERROR: missing chunk number 0 for toast value 32789 in pg_toast_2619 现象&#xff1a;查询业务表数据提示 ERROR: missing chunk number 0 for toast value 32789 in pg_toast_2619 处理方法&#xff1a;定位到损坏的行的位置&#xff0c;然后删除有问…

基于微信小程序的移动学习平台的设计与实现+ssm(lw+演示+源码+运行)

摘 要 由于APP软件在开发以及运营上面所需成本较高&#xff0c;而用户手机需要安装各种APP软件&#xff0c;因此占用用户过多的手机存储空间&#xff0c;导致用户手机运行缓慢&#xff0c;体验度比较差&#xff0c;进而导致用户会卸载非必要的APP&#xff0c;倒逼管理者必须改…

git 工具原理

git 目录 git git的使用 了解git的三个区域 具体操作 如何下载别人上传到git的工程 -- 可以参考菜鸟教程&#xff0c;包括安装配置git Git 安装配置 | 菜鸟教程 -- Git 是一种分布式版本控制系统&#xff0c;用于管理软件项目的源代码。它是由 Linux 之父 Linus Torval…

VLAN高级+以太网安全

VLAN聚合 MUX VLAN QinQ 以下是这三种VLAN技术的作用及其在项目中的应用实例&#xff1a; VLAN聚合 (VLAN Aggregation) VLAN聚合通常用于将多个VLAN数据聚合到一个物理链路上&#xff0c;以减少链路数量、提高链路利用率。这样可以在一个物理链路上同时传输不同VLAN的数据包&…

前端零基础学习Day-Six

CSS选择器 标签选择器 以HTML标签作为选择器&#xff1a; <style type"text/css"> p,h1,h2,h3,h4{font-size:30px;} p{color:blue;font-family:"隶书";} h1{color:red;} </style> 通过标签选择器设置样式&#xff0c;那使用该标签的内容都引…