MySQL进阶——视图

news2024/11/28 12:41:50

目录

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写好。

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

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

相关文章

【linux】dup文件描述符复制函数和管道详解

目录 一、文件描述符复制 1、dup函数&#xff08;复制文件描述符&#xff09; ​编辑 2、dup2函数&#xff08;复制文件描述符&#xff09; ​编辑 二、无名管道pipe 1、概述 2、无名管道的创建 3、无名管道读写的特点 4、无名管道ps -A | grep bash实现 三、有名管道FI…

下载caj viewer查看caj论文

前言 CAJ是“中国学术期刊全文数据库”&#xff08;China Academic Journals&#xff09;的英文缩写&#xff0c;同时也是“中国学术期刊全文数据库”中的一种文件格式。我们从CNKI&#xff08;中国知网&#xff09;下载的资料一般都是这种文件格式。 CAJ不同于PDF等&#xff…

Kimi还能对学术论文进行润色?我来教你!

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 一、引言 在学术界&#xff0c;论文的质量往往决定了研究的可信度和影响力。Kimi作为一款人工智能助手&#xff0c;可以为学术论文的润色提供有效的帮助。本文将详细介绍如何利用Kimi进…

面向对象进阶--抽象(Java 抽象)详解

1.1 抽象类引入 父类中的方法&#xff0c;被它的子类们重写&#xff0c;子类各自的实现都不尽相同。那么父类的方法声明和方法主体&#xff0c;只有声明还有意义&#xff0c;而方法主体则没有存在的意义了(因为子类对象会调用自己重写的方法)。换句话说&#xff0c;父类可能知道…

复盘最近的面试

这个礼拜一直在面试&#xff0c;想着看看能否拿到不错的offer前去实习&#xff0c;从周一到周四&#xff0c;面了将近10家&#xff0c;特整理此份面经&#xff0c;希望对秋招的各位有所帮助 A公司 一面 面试官人很好&#xff0c;我回答的时候不会他会笑笑然后提醒我 自我介绍~…

VMware安装及创建虚拟机

安装完成后&#xff0c;点击创建新的虚拟机 操作完成后就安装成功啦 &#xff0c;下个教程出虚拟机Linux和xshell的连接及可能出现的问题解决方案

Elasticsearch:倒数排序融合 - Reciprocal rank fusion - 8.14

警告&#xff1a;此功能处于技术预览阶段&#xff0c;可能会在未来版本中更改或删除。语法可能会在正式发布之前发生变化。Elastic 将努力修复任何问题&#xff0c;但技术预览中的功能不受官方正式发布功能的支持 SLA 约束。 倒数排序融合 (reciprocal rank fusion - RRF) 是一…

QTday5 2024-06-19

作业要求&#xff1a; 1.思维导图 2.整理代码&#xff1a;TCP服务器 作业1&#xff1a;思维导图 作业2&#xff1a;整理代码 运行代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QList>…

力扣-最长连续序列

文章目录 题目题解解释代码 题目 原题链接&#xff1a;最长连续序列 题解 思路&#xff1a; 定义变量 res 用来记录最长连续序列的长度。对集合中的每个元素进行如下处理&#xff1a; 检查该元素是否是某个连续序列的起点&#xff08;即 num - 1 不在集合中&#xff09;。如…

90 岁老人靠一辆自行车年赚 170 亿,捷安特如何打造山地车极致产品力?

一位富家小开在中年时经商失败&#xff0c;38岁时从零开始创业&#xff0c;最终在自行车整车市场占据了70%的份额&#xff0c;他是怎么做到的&#xff1f; 一家曾为美国自行车品牌代工的台湾工厂&#xff0c;成功从ToB转型为ToC业务&#xff0c;从90%的代工业务转变为全球最大…

迅狐多商户直播商城系统源码:电商领域的创新融合

随着直播技术的兴起和电子商务的蓬勃发展&#xff0c;迅狐多商户直播商城系统源码应运而生&#xff0c;为商家和消费者提供了一个全新的互动购物平台。 多商户直播商城系统源码概述 迅狐多商户直播商城系统源码是一个高度集成的解决方案&#xff0c;它结合了直播的即时性和电…

进入容器修改内容_提交改变后的镜像_镜像保存成tar压缩包离线传输_镜像传输_镜像推送到公共仓库---分布式云原生部署架构搭建009

然后再来看,进入docker内部去看看. 用 docker exec -it imgid /bin/bash 这样就可以进入容器内部 而且关于,镜像的,内部放到什么地方了,都可以找到比如 在hub.docker的地址里面,找到nginx可以看到,对应的 /usr/share/nginx/html 可以看到这个路径. 然后去看看,进入到/usr…

浏览器(Browser):轻量级浏览器,高效浏览新体验

在可的哥桌面&#xff08;Codigger Desktop&#xff09;&#xff0c;我们始终秉持创新精神&#xff0c;致力于提供卓越的用户体验。如今&#xff0c;我们激动地宣布一项全新功能的发布——轻量级浏览器Browser。这款浏览器的推出&#xff0c;正是我们对用户体验追求的再次体现&…

C++:你用过MultiIndex容器吗?

作为C开发者&#xff0c;我们对键值容器非常熟悉&#xff0c;例如std::set、std::map、std::unordered_map等。这些容器以其强大的功能和高效的性能&#xff0c;成为我们处理数据存储和检索任务时的得力助手。但是你用过多键容器&#xff08;MultiIndex&#xff09;吗&#xff…

【大分享06】收、治、用、安“四管齐下”, 做好多业务系统电子文件归档与管理

关注我们 - 数字罗塞塔计划 - 本篇是参加由电子文件管理推进联盟联合数字罗塞塔计划发起的“大分享”活动投稿文章&#xff0c;来自上海泰宇信息技术股份有限公司&#xff0c;作者&#xff1a;金靓。 随着数字政府建设的深入推进以及“互联网政务服务”的快速发展&#xff0c…

TS安装及JS转换

第一步&#xff1a;先安装好node.js&#xff0c;可以在官方下载或我们提供压缩包直接安装好node.js Node.js的官方网站是下载 | Node.js 中文网 下载对应系统的版本。我们提供是64位。安装好后调出dos命名&#xff0c;输入 npm确认下有没有安装好。 第二步&#xff1a;安装cnpm…

初识 GPT-4 和 ChatGPT

文章目录 LLM 概述理解 Transformer 架构及其在 LLM 中的作用解密 GPT 模型的标记化和预测步骤 想象这样⼀个世界&#xff1a;在这个世界里&#xff0c;你可以像和朋友聊天⼀样快速地与计算机交互。那会是怎样的体验&#xff1f;你可以创造出什么样的应用程序&#xff1f;这正是…

【Linux进程】手把手教你如何调整----进程优先级(什么是优先级?为什么要有优先级?)

目录 一、前言 二、优先级的基本概念 &#x1f95d; 什么是优先级&#xff1f; &#x1f34d; 为什么要有优先级&#xff1f; 三、如何查看并修改 --- 进程优先级 &#x1f347; PRI and NI &#x1f525;PRI&#x1f525; &#x1f525;NI&#x1f525; &#x1f3…

关键属性描述ASYNC_REG

关键属性描述 属性信息 本章提供有关XilinxVivadoDesign Suite属性的信息。条目 每个属性包含以下信息&#xff08;如适用&#xff09;&#xff1a; •物业说明&#xff0c;包括其主要用途。 •支持该特性的Xilinx FPGA体系结构&#xff0c;包括UltraScale™ 架构设备&#xff…

【fiddler】fiddler抓取websocket

1.先了解websocket流 下载4.5版本以上的fiddler 如图所示&#xff1a;在rules--customize rules 里面插入以下代码&#xff1a; static function OnWebSocketMessage(oMsg: WebSocketMessage) { // Log Message to the LOG tab FiddlerApplication.Log.LogString(oMsg.ToStr…