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

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

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

相关文章

Github 2024-06-19 C开源项目日报 Top9

根据Github Trendings的统计,今日(2024-06-19统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目9C++项目1Netdata: 开源实时监控平台 创建周期:4020 天开发语言:C协议类型:GNU General Public License v3.0Star数量:68982 个Fork数量…

乾元通渠道商中标金昌市自然灾害应急能力提升项目

近日&#xff0c;乾元通渠道商中标甘肃省金昌市自然灾害应急能力提升项目&#xff0c;乾元通作为设备厂家&#xff0c;为项目提供通信指挥类装备&#xff08;多链路聚合设备&#xff09; QYT-X1 。 随着万亿国债项目的全面铺开&#xff0c; 青岛乾元通数码科技有限公司 作为国家…

STM32多种开发环境及生成hex及bin文件介绍

一.STM32开发环境 KEIL系列 &#xff08;1&#xff09;KEIL公司目前有四款独立的嵌入式软件开发工具&#xff0c;即MDK、KEIL C51、KEIL C166、KEIL C251&#xff0c;它们都是KEIL公司品牌下的产品&#xff0c;都基于uVision集成开发环境&#xff0c;其中MDK是RealView系列中…

四边形不等式优化

四边形不等式优化 应用于类似以下dp转移方程。 f i min ⁡ 1 ≤ j ≤ i ( w i , j , f i ) f_{i}\min_{1\le j\le i}(w_{i,j},f_{i}) fi​1≤j≤imin​(wi,j​,fi​) 假设 w i , j w_{i,j} wi,j​ 可以在 O ( 1 ) O(1) O(1) 的时间内进行计算。 在正常情况下&#xff0c;…

Python神经影像数据的处理和分析库之nipy使用详解

概要 神经影像学(Neuroimaging)是神经科学中一个重要的分支,主要研究通过影像技术获取和分析大脑结构和功能的信息。nipy(Neuroimaging in Python)是一个强大的 Python 库,专门用于神经影像数据的处理和分析。nipy 提供了一系列工具和方法,帮助研究人员高效地处理神经影…

【C++实验】多项式加减

题目&#xff1a;一元多项式运算 基本要求&#xff1a; &#xff08;1&#xff09; 输入并建立多项式; &#xff08;2&#xff09; 输出多项式; &#xff08;3&#xff09; 多项式加法 &#xff08;4&#xff09; 多项式减法。 测试数据&#xff1a; 代码展示&#xff1a; #i…

[论文阅读笔记31] Object-Centric Multiple Object Tracking (ICCV2023)

最近Object centric learning比较火, 其借助了心理学的概念, 旨在将注意力集中在图像或视频中的独立对象&#xff08;objects&#xff09;上&#xff0c;而不是整个图像。这个方法与传统的基于像素或区域的方法有所不同&#xff0c;它试图通过识别和分离图像中的各个对象来进行…

代码随想录——全排列Ⅱ(Leetcode 47)

题目链接 回溯 class Solution {List<List<Integer>> res new ArrayList<List<Integer>>();List<Integer> list new ArrayList<Integer>();boolean[] used;public List<List<Integer>> permuteUnique(int[] nums) {used …

IPD笔记

IPD笔记 先弄一个一图流&#xff0c;改天再过来继续补充 IPD&#xff08;Integrated Product Development&#xff09;即集成产品开发&#xff0c;是一套产品开发的模式、理念与方法。华为的IPD的核心思想是基于市场需求&#xff0c;将产品开发作为一项投资来管理&#xff0c;以…

python pynput实现鼠标点击两坐标生成截图

脚本主要实现以下功能&#xff1a; 按ctrl开始截图&#xff0c;点击两个坐标&#xff0c;保存截图tk输出截图文本信息&#xff0c;文本输出内容倒序处理默认命名为A0自增。支持自定义名称&#xff0c;自增编号&#xff0c;修改自定义名称自增重新计算清空文本框内容 from pyn…

three.js 第十一节 - uv坐标

// ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js // 导入tween import * as T…

1931java Web披萨店订餐系统idea开发mysql数据库web结构java编程计算机网页源码servlet项目

一、源码特点 java Web 披萨店订餐系统是一套完善的信息管理系统&#xff0c;结合java 开发技术和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。 视频地址&#xff1a;…

Android CTS环境搭建

CTS即Compatibility Test Suite意为兼容性测试&#xff0c;是Google推出的Android平台兼容性测试机制。其目的是尽早发现不兼容性&#xff0c;并确保软件在整个开发过程中保持兼容性。只有通过CTS认证的设备才能合法的安装并使用Google market等Google应用。 搭建CTS测试环境需…

CST初级教程 七

本教程将实例讲解CST设计优化仿真及其操作步骤。下面是一个微带功率分配器的图片&#xff1a; 一 3D建模 Substrate 建模 Step1 绘制Substrate外形 Substrate 的尺寸参数如下&#xff1a; Step2 添加新材料Substrate Step3 将新建的材料分配给Substrate 选中新建材料Substra…

数学建模系列(3/4):典型建模方法

目录 引言 1. 回归分析 1.1 线性回归 基本概念 Matlab实现 1.2 多元回归 基本概念 Matlab实现 1.3 非线性回归 基本概念 Matlab实现 2. 时间序列分析 2.1 时间序列的基本概念 2.2 移动平均 基本概念 Matlab实现 2.3 指数平滑 基本概念 Matlab实现 2.4 ARIM…

WordPress插件:子比zibll主题插件 炙焰美化全开源插件V3.2

在网络世界中&#xff0c;开源内容管理系统&#xff08;CMS&#xff09;已经成为了网站构建的关键工具之一。WordPress&#xff0c;作为最受欢迎的开源CMS之一&#xff0c;其广泛的应用及其灵活性使得它成为了创建和管理各种类型网站的理想选择。而Zibll主题插件&#xff0c;作…

【Android WebView】WebView基础

一、简介 WebView是一个基于webkit引擎、展现web页面的控件。Android的Webview在低版本和高版本采用了不同的webkit版本内核&#xff0c;4.4后直接使用了Chrome。 二、重要类 以WebView类为基础&#xff0c;WebSettings、WebViewClient、WebChromeClient为辅助共同完成安卓段加…

2024年【T电梯修理】免费试题及T电梯修理考试总结

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 T电梯修理免费试题参考答案及T电梯修理考试试题解析是安全生产模拟考试一点通题库老师及T电梯修理操作证已考过的学员汇总&#xff0c;相对有效帮助T电梯修理考试总结学员顺利通过考试。 1、【多选题】TSGT7005-2012《…

【Java】已解决java.nio.channels.ClosedChannelException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.nio.channels.ClosedChannelException异常 在Java的NIO&#xff08;New I/O&#xff09;编程中&#xff0c;java.nio.channels.ClosedChannelException是一个常见的异常…

XTDrone-多无人机精准降落-配置教程

1 编译AprilTag_ROS AprilTag是一个视觉基准系统&#xff0c;可用于机器人&#xff0c;增强现实和相机校准等。 根据AprilTag可以可靠地计算标签相对于相机的3D位置&#xff0c;方向和ID号。这里我们使用AprilTag的ROS库来实现位姿估计与ID号计算。 编译命令如下&#xff1a; …