MySQL进阶——视图

目录

1基本语法

1.1创建

1.2 查询

1.3 修改

1.4 删除

2 检查选项

2.1 级联CASCADED

2.2本地LOCAL

3 更新及作用

3.1视图的更新条件

3.2视图的作用

4视图案例

1基本语法

视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。

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

1.1创建

语法:

CREATE [OR REPLACE 替换] VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION]

案例:创建包含id和name两个字段的视图且id<10

SQL代码:

create or replace view str_v_1 as select id,name from student where id <=10;

1.2 查询

因为视图(View)是一种虚拟存在的表。所以可以操作表一样操作视图。

(1)查看创建视图语句:SHOW CREATE VIEW 视图名称;

SQL代码:

show create view str_v_1;

(2)查看视图数据:SELECT * FROM 视图名称 ...... ;

SQL代码:select * from str_v_1;

查看视图也可以加条件:

SQL代码:select * from str_v_1 where id <3;

1.3 修改

(1)方式一:

CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]

SQL代码:在原来是视图上加上no

create or replace view str_v_1 as select id,name,no from student where id <=10;

(2)方式二:ALTER VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]

SQL代码:在原来是视图上删掉name

alter view str_v_1 as select id,no from student where id <=10;

1.4 删除

语法:

DROP VIEW [IF EXISTS] 视图名称 [,视图名称] ...

SQL代码:

drop view if exists str_v_1;

2 检查选项

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

2.1 级联CASCADED

CREATE [OR REPLACE 替换] VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION ](检查选项)

案例:

(1)当不加检查选项:在执行插入时,不管是id=6<20,id=30>20,都会插入成功,即不会对视图str_v_1的操作进行检查,这样就会出现插入成功,但是查询不出来的情况。

create or replace view str_v_1 as select id,name from student where id <=20;

(2)加说检查选项:在执行插入时,在执行id=31>20时,会被检查出来,而不被插入进去。

SQL代码:

create or replace view str_v_1 as select id,name from student where id <=20 with cascaded check option ;

select * from str_v_1;

insert into str_v_1 values(7,'Jan');

insert into str_v_1 values(31,'Tom');

(3)还会检查依赖视图中的规则以保持一致性:

执行id=26时就会失败,因为id=26<10虽然满足str_v_2的条件,但是加了检查选项with cascaded check option,所以也会检查是否满足str_v_1的条件id=26>20的,不满足,所以最终不会运行成功。即加了检查选项,所有语句中的视图条件都要满足。

create or replace view str_v_1 as select id,name from student where id <=20;

create or replace view str_v_2 as select id,name from str_v_1 where id >=10 with cascaded check option ;

select * from str_v_2;



insert into str_v_2 values(15,'Jan');

insert into str_v_2 values(16,'Jan');

insert into str_v_2 values(26,'Tom');

(4)str_v_3没有加检查选项,所以id <=15可以不用满足,但是依赖了str_v_2,str_v_2又依赖了str_v_1,所以要满足前面两个的条件。

create or replace view str_v_1 as select id,name from student where id <=20;


create or replace view str_v_2 as select id,name from str_v_1 where id >=10 with cascaded check option ;

select * from str_v_2;


create or replace view str_v_3 as select id,name from str_v_2 where id <=15;

select * from str_v_2;


insert into str_v_2 values(11,'Jan');

insert into str_v_2 values(17,'Jan');

insert into str_v_2 values(28,'Tom');

insert into str_v_2 values(9,'Tom');

因此10<=11,17<=20可以插入,28,9不能插入:

2.2本地LOCAL

v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 local ,但是v1视图创建时未指定检查选项。 则在执行检查时,只会检查v2,不会检查v2的关联视图v1

检查选项为 local只会检查当前的,不会选择依赖的。Id为26和29不满足v1和v3,但是他们自己没有检查,local不会管。

create or replace view str_v_1 as select id,name from student where id <=20;

create or replace view str_v_2 as select id,name from str_v_1 where id >=10 with local check option ;

create or replace view str_v_3 as select id,name from str_v_2 where id <=15;

select * from str_v_2;



insert into str_v_2 values(12,'Jan');

insert into str_v_2 values(26,'Jan');

insert into str_v_3 values(29,'Jan');

3 更新及作用

3.1视图的更新条件

要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系

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

A. 聚合函数或窗口函数(SUM()、 MIN()、 MAX()、 COUNT()等)

B. DISTINCT

C. GROUP BY

D. HAVING

E. UNION 或者 UNION ALL

如下案例:

这个视图使用了COUNT()就不能进行插入操作

create or replace view stu_v as select count(*) from student;

select * from stu_v;

insert into stu_v values(10);

3.2视图的作用

1)简单

视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视 图,从而使得用户不必为以后的操作每次指定全部的条件。

2)安全

数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据(保证一些敏感数据的安全)。

如:就将学号no隐藏了没有给这个视图查看权利。

create or replace view str_v_1 as select id,name from student where id <=20;

3)数据独立

视图可帮助用户屏蔽真实表结构变化带来的影响(创建视图给字段起别名,这样基础表变化不会影响视图)。

如:这样name字段名字改变了,不会影响视图中的字段。

create or replace view str_v_1 as select id,name as stuname from student where id <=20;

select * from str_v_1;

4视图案例

案例要求:

(1)为了保证数据库表的安全性,开发人员在操作tb_user表时,只能看到的用户的基本字段,屏蔽 密码和姓名两个字段。

(2)查询每个学生所选修的课程(三张表联查),这个功能在很多的业务中都有使用到,为了简化操 作,定义一个视图。

SQL实现:

(1)视图中查询除开“密码和姓名”以为的字段

create view v_tb_user as select id,username,birthday,sex from tb_user;

select * from v_tb_user;

(2)三张表联查:通过sc将s和c表连接起来的,可以先把select写好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/732671.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YYU-5/80-260mm型钢筋残余变形测试仪 电子引伸计

YYU-5/80-260mm型钢筋接头专用引伸计&#xff0c;是按照《JGJ 107 2010 钢筋技术连接技术规程》的技术要求设计的&#xff0c;专门用于测试钢筋接头残余变形的双向平均引伸计&#xff0c;其标距可以根据钢筋直径要求进行调整。 完全符合《JGJ 107 2010 钢筋技术连接技术规程》…

Java 超详细实现导入导出 (包含时间转换问题和样式)

序言 工作中遇到了导入导出问题&#xff0c;并且出现了导入或导出Excel时间格式变为数字的问题。通过学习解决实现了这些功能&#xff0c;记录总结分享给大家。本文将详细介绍如何使用 Java 编程语言和 Apache POI 库来实现这些功能。我们将通过一个示例项目演示如何从数据库中…

C语言| 数组倒置II

数组倒置第二种方法&#xff1a;直接在数组内进行倒置 第一个元素和最后一个元素交换&#xff0c; 第二个元素和倒数第二个元素交换 第三个元素和倒数第三个元素交换...... 数组元素个数为偶数&#xff0c;每个元素都能交换一次&#xff1b; 数组元素个数为奇数&#xff0c;最…

这次,彻底理解 JavaScript 的执行机制

无论你是 JavaScript 的初学者还是专家&#xff0c;无论是为了求职面试还是日常开发工作&#xff0c;我们经常会遇到这样的情况&#xff1a;给出几行代码&#xff0c;我们需要知道它们的输出内容和顺序。由于 JavaScript 是一种单线程语言&#xff0c;我们可以得出以下结论&…

南昌代理记账服务,打造专业财务管理团队

随着企业的发展和规模不断扩大&#xff0c;财务管理也变得越来越重要&#xff0c;而代理记账作为一种专业的财务管理服务&#xff0c;正逐步成为中小企业发展的必要条件之一&#xff0c;南昌作为江西省的省会城市&#xff0c;拥有一批优秀的会计服务机构&#xff0c;为各类企业…

基于Java学生选课管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

【启明智显产品分享】工业级HMI芯片——Model3,不止是速度,USB\CAN\8路串口

一、引言 Model3作为一款工业级HMI芯片&#xff0c;其性能卓越且功能全面。本文将从多个角度深入介绍Model3芯片&#xff0c;以展示其不仅仅是速度的代表。 二、Model3核心特性介绍 Model3工业级跨界MCU是一款国产自主的基于RISC-V架构的高性能芯片&#xff0c;内置平头哥E…

你只是重新发现了一些东西

指北君关于另外一条思维路径的发现。 "自以为是"的顿悟时刻 有很多时候&#xff0c;我会"自以为是"的发现/发明一些东西。这种"自以为是"的时刻通常还带有一些骄傲自豪的情绪。这种感觉特别像古希腊博学家阿基米德 在苦思冥想如何测量不规则物体…

windows使用curl命令出现乱码的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

deepin 加入甲辰计划,共建 RISC-V 繁荣生态

内容来源&#xff1a;deepin&#xff08;深度&#xff09;社区 今日&#xff0c;deepin(深度)社区宣布正式加入甲辰计划&#xff0c;致力于在下一个丙辰年&#xff08;2036龙年&#xff09;之前&#xff0c;基于RISC-V实现从数据中心到桌面办公、从移动穿戴到智能物联网全信息产…

通俗解释resultType和resultMap的区别

【 1 对于单表而言&#xff1a; 注&#xff1a;以下都是摘抄过来的&#xff0c;做了让自己更能理解的版本 如果数据库返回结果的列名和要封装的实体的属性名完全一致的话用 resultType 属性 如果数据库返回结果的列名&#xff08;起了别名&#xff09;和要封装的实体的属性名…

Android使用MPAndroidChart 绘制折线图

效果图&#xff1a; 1.导入依赖 1.1在项目根目录下的build.gradle文件中添加代码&#xff08;注意不是app下的build.gradle&#xff09;&#xff1a; maven { url https://jitpack.io } 1.2在app下的build.gradle中的依赖下添加&#xff1a; implementation com.github.PhilJa…

STM32单片机USART串口收发数据包

文章目录 1. 串口通信 1.1 串口初始化 1.2 库函数 2. 串口收发HEX数据包 2.1 Serial.c 2.2 Serial.h 2.3 main.c 3. 串口收发文本数据包 3.1 Serial.c 3.2 Serial.h 3.3 main.c​​​​​​​ 1. 串口通信 对于串口通信的详细​​​​​​​解析可以看下面这篇文章…

生产实习Day7 ---- Hive介绍

文章目录 概要整体架构流程Hive数据库操作建表语法表分类 概要 Hive是基于Hadoop的数据仓库工具。可以用于存储在Hadoop集群中的HDFS文件数据集进行数据整理、特殊查询和分析处理。Hive提供了类似于关系型数据库SQL语言的HiveQL工具&#xff0c;通过HQL&#xff08;HiveQL&…

用VPS部署聊天机器人有哪些优势?

VPS足以帮助您将人工智能 (AI) 的功能无缝融入聊天机器人并增强客户支持。聊天机器人已迅速成为改善用户体验的首选解决方案&#xff0c;因为它们全天候在线且可编程回答各种问题。 聊天机器人在客户支持方面的作用不容置疑。但所有出色的解决方案都需要出色的网络托管。 VPS…

从零到发布:npm插件包终极指南

在JavaScript和Node.js的生态系统中&#xff0c;npm&#xff08;Node Package Manager&#xff09;是最重要的包管理工具之一。通过npm&#xff0c;开发者可以共享代码、复用他人的工作成果以及协作开发。本指南将详细介绍如何通过npm发布自己的插件包&#xff0c;以便其他开发…

力扣372. 超级次方

Problem: 372. 超级次方 文章目录 题目描述思路复杂度Code 题目描述 思路 1.处理数组指数&#xff1a;如下图可以将其转换为一个递归的操作 2.处理 mod 运算:对于模运算我们有公式&#xff1a; ( a b ) % k ( a % k ) ( b % k ) % k (a \times b) \% k (a \% k) \times (b…

如何利用数据仓库进行业务分析:一名大数据工程师的视角

在大数据时代&#xff0c;数据的有效利用对企业的成功至关重要。 本文将基于上面的流程图&#xff0c;详细介绍如何利用数据仓库进行业务分析&#xff0c;并提供实际的例子和代码演示&#xff0c;以帮助读者更好地理解和应用相关技术。 数据仓库的基本流程 上图展示了一个典…

PointCloudLib 点云边缘点提取 C++版本

0.实现效果 1.算法原理 PCL(Point Cloud Library)中获取点云边界的算法主要基于点云数据的几何特征和法向量信息。以下是对该算法的详细解释,按照清晰的格式进行归纳: 算法概述 PCL中的点云边界提取算法主要用于从3D点云数据中识别并提取出位于物体边界上的点。这些边界…

五种主流数据库连接池的比较和分析(从零入门)

数据库连接池&#xff08;Database Connection Pool&#xff09;是现代应用程序中至关重要的组件。它通过管理一组数据库连接的复用&#xff0c;极大地提升了应用程序的性能和效率。在没有连接池的情况下&#xff0c;每个数据库请求都需要打开和关闭数据库连接&#xff0c;这不…