【学习笔记】MySQL(Ⅲ)

MySQL(Ⅲ)

  • 11、 进阶篇 —— 视图
    •       11.1、概述
    •       11.2、基本语法
    •       11.3、检查选项 CASCADED
    •       11.4、检查选项 LOCAL
    •       11.5、视图的更新原则
  • 12、 进阶篇 —— 存储过程
    •       12.1、概述
    •       12.2、基本语法
    •       12.3、系统变量
    •       12.4、用户定义变量
    •       12.5、局部变量
    •       12.6、条件判断
    •       12.7、CASE
    •       12.8、循环
    •       12.9、游标 及 条件处理程序
    •       12.10、存储函数
  • 13、 进阶篇 —— 触发器
    •       13.1、概述
    •       13.2、基本语法
  • 14、 进阶篇 —— 锁
    •       14.1、概述
    •       14.2、全局锁
    •       14.3、表级锁
    •       14.4、行级锁
  • 15、 终结篇 —— InnoDB 存储引擎
  • 16、 终结篇 —— MySQL管理工具

11、 进阶篇 —— 视图

      11.1、概述

        视图(View)是MySQL中的一种虚拟表,其内容是根据预保留的 SQL 逻辑动态地查询生成的,使用视图时,数据库系统会自动执行相关的 SQL 逻辑,并返回查询结果。因此,视图可以看作是一个预定义的查询语句

优点描述
简化复杂查询通过视图,可以将复杂的查询简化为一个简单的查询,使得数据访问更加方便
安全性通过视图,可以限制用户对基表的访问,只暴露需要的数据,从而提高数据的安全性
数据抽象视图可以隐藏表的复杂结构,为用户提供一个更简洁的接口
数据一致性通过视图,可以确保不同用户看到的数据一致
视图的限制
① 视图不支持索引、触发器和默认值
② 某些复杂的查询可能不能直接转换为可更新的视图
③ 视图的性能可能不如直接查询基表,因为视图需要动态生成数据

      11.2、基本语法

创建:CREATE [ OR REPLACE ] VIEW 视图名 AS SELECT语句
自定义列名字:CREATE [ OR REPLACE ] VIEW(列名1,列名2...) 视图名 AS SELECT语句
查询创建视图的语句:SHOW CREATE VIEW 视图名
查询视图的数据:跟查询普通的表一样
修改视图法1:CREATE OR REPLACE VIEW 视图名 AS SELECT语句
修改视图法2:ALTER VIEW 视图名 AS SELECT语句
删除视图:DROP VIEW [ IF EXISTS ] 视图名

-- 创建视图
create OR REPLACE VIEW user_v_1 AS SELECT * FROM tb_user where age < 30;-- 查询创建视图的语句
SHOW CREATE VIEW user_v_1;-- 查询视图数据
SELECT * FROM user_v_1;-- 修改视图
CREATE OR REPLACE VIEW user_v_1 AS SELECT name,age FROM tb_user WHERE age < 30;
SELECT * FROM user_v_1;
ALTER VIEW user_v_1(姓名,年龄) AS SELECT name,age FROM tb_user WHERE age < 30;
SELECT * FROM user_v_1;-- 删除视图
DROP VIEW user_v_1;

      11.3、检查选项 CASCADED

        当我们往视图中插入数据时,其实会插入到关联的基表中,然而当我们插入的数据不符合视图的 SQL 逻辑时(例如视图呈现年龄小于30的,然后插入了一条年龄40的数据),会出现一种通过这个视图进行插入数据,但插入后这个视图又看不到的情况,显得不太尊重这个视图,例如

-- 建表
CREATE TABLE student(id int AUTO_INCREMENT PRIMARY KEY,name varchar(10),age int,gender char(1)
)--插入数据
INSERT INTO student(name,age,gender) VALUES ('Niki',21,'男'),('Tom',23,'男'),('Siri',27,'女'),('Jerry',28,'男');-- 创建视图
CREATE VIEW stu_v_1 AS SELECT name,age FROM student WHERE age < 25;-- 通过视图插入数据
INSERT INTO stu_v_1(name,age) VALUES ('Sara',24);
INSERT INTO stu_v_1(name,age) VALUES ('Zayn',29);
SELECT * FROM stu_v_1; # 第二条插入的数据看不到

        因此我们可以给视图添加 CASCADED 检查选项,当为视图插入或更新的数据,需要满足其 SQL 逻辑才能插入成功

语法:CREATE VIEW 视图名 AS SELECT语句 WITH [ CASCADED ] CHECK OPTION ;( WITH CHECK OPTION 默认选 CASCADE )

-- 先删掉上插入的两条数据
DELETE FROM student WHERE name = 'Sara' OR name = 'Zayn';-- 修改视图
ALTER VIEW stu_v_1 AS SELECT name,age FROM student WHERE age < 25 WITH CASCADED CHECK OPTION ;-- 再次通过视图插入数据
INSERT INTO stu_v_1(name, age) VALUES ('Sara', 24);
INSERT INTO stu_v_1(name, age) VALUES ('Zayn', 29); # 插入失败

        CASCADED 的工作原理是,检查插入的数据是否满足当前视图的 SQL 逻辑,以及满足所依赖的视图的 SQL 逻辑,例如

依赖选项SQL逻辑在v3插入age=11、17、28
视图 v3v2-age<=15没有检查选项,直接通过
视图 v2v1CASCADEDage>=1011:符合,17:符合,28:符合
视图 v1基表-age<=20受 v2 的CASCADED影响,v1也要检查
11:符合,17:符合,28:拦截
基表---11、17插入成功,28插入失败

      11.4、检查选项 LOCAL

        LOCAL 也是一种检查约束,与 CASCADED 不同的是,它只会对当前的视图做检查,而不会让其父视图也要做检查

语法:CREATE VIEW 视图名 AS SELECT语句 WITH LOCAL CHECK OPTION ;

依赖选项SQL逻辑在v3插入age=14
视图 v3v2-age<<20没有检查选项,直接通过
视图 v2v1LOCALage>=1014:符合
视图 v1基表-age<=15没有检查选项,直接通过
基表---14插入成功

      11.5、视图的更新原则

        当视图的每一行与基表中的每一行是一一对应的关系时,视图才可以更新,如果视图的 SQL 逻辑包含以下任何一项,则视图不能更新

不可更新的关键字
聚合函数,例如 SUM(),MIN()、MAX()、COUNT()等
DISTINCE
GROUP BY
HAVING
UNION 或者 UNION ALL

12、 进阶篇 —— 存储过程

      12.1、概述

        存储过程是一组预编译的SQL语句,这些语句存储在数据库中,可以通过调用来执行。存储过程允许你将业务逻辑封装在数据库中,提供了一种更高效和灵活的方法来处理数据(函数)

优点描述
提高性能存储过程在首次执行时会被编译并缓存起来,以后再调用时直接执行编译好的代码,减少了SQL解析和编译的时间
重用代码存储过程可以多次调用,避免了代码重复,提高了代码的可维护性
安全性通过存储过程,可以控制对数据库的访问权限,保护底层数据
简化复杂操作将复杂的业务逻辑封装在存储过程中,使得应用程序调用更简洁
减轻网络负担将多个SQL语句封装起来存储在数据库中,现在发送一次请求即可完成相应的业务,而不是将多个SQL语句一句一句地与数据库交互,减轻了网络负担

      12.2、基本语法

创建:CREATE PROCEDURE 存储过程名([IN输入的参数列表,OUT返回的参数列表]) BEGIN ... END
调用:CALL 存储过程名([参数])
查看指定数据库的存储过程信息:SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = '数据库名'
查看存储过程的创建语句:SHOW CREATE PROCEDURE 存储过程名
删除:DROP PROCEDURE 存储过程名

-- 创建存储过程
CREATE PROCEDURE p1()
BEGINSELECT COUNT(*) FROM student;
END;

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

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

相关文章

x86计算机的启动初期流程 Linux 启动流程

x86计算机的启动初期流程 CPU&#xff1a; step1&#xff0c;加点开机&#xff0c;cpu自己初始化 step2&#xff0c;cpu 从物理地址 0xFFFFFFF0h 取指令执行&#xff1b;此处存放BIOS代码&#xff0c;这些代码可以是由主板自动从 EEPROM中拷贝至此内存地址处&#xff1b;即下…

MySQL 日志(二)

本篇将继续介绍MySQL日志的相关内容 目录 一、二进制日志 简介 注意事项 删除二进制日志 查看二进制日志 二进制日志的格式 二、服务器日志维护 一、二进制日志 简介 二进制日志中主要记录了MySQL的更改事件&#xff08;不包含SELECT和SHOW),例如&#xff1a;表的…

Java关键字

一、什么是关键字&#xff1f; 关键字是java语言中一些被赋予特定意义的一些单词&#xff0c;不可以把它当做标识符来使用。 在java中有两个特殊的关键字goto、const&#xff0c;我们称这两个关键字为保留字。 二、Java中的关键字有哪些&#xff1f; 1&#xff09;48个关键…

【刷力扣】23. 合并 K 个升序链表(dummy节点技巧 + 分治思维 + 优先队列)

目录 一、合并升序链表问题二、题目&#xff1a;[21. 合并两个有序链表](https://leetcode.cn/problems/merge-two-sorted-lists/description/)1、掌握dummy节点的技巧 三、题目&#xff1a;[23. 合并 K 个升序链表](https://leetcode.cn/problems/merge-k-sorted-lists/descri…

模拟题1(考虑周全以及情况较多)

牛客小白月赛96(重现赛)D题 题目解析以及注意事项 该题主要是找线路最多和最少的各种情况&#xff0c;从而达到整体连通图的构建代价最小的情况。 注意事项&#xff1a;a,b的正负影响着这个图的线尽可能的多还是少 思路图 { a ≥ b { b < 0 a < 0 : 能连的线都连上 b…

Android 工程副总裁卸任

Android 工程副总裁卸任 Android工程副总裁Dave Burke宣布&#xff0c;他将辞去领导Android工程的职位&#xff0c;将重心转向“AI/生物”项目。不过&#xff0c;他并没有离开Alphabet&#xff0c;目前仍将担任Android系统开发顾问的角色。 Burke参与了Android系统的多个关键…

CSS伪类与伪元素的区别

CSS中的伪类&#xff08;Pseudo-classes&#xff09;和伪元素&#xff08;Pseudo-elements&#xff09;是两个不同的概念&#xff0c;它们的主要区别在于它们的作用和目标。 伪类&#xff08;Pseudo-classes&#xff09; 伪类用于选择处于特定状态的元素。这些状态并不是由HT…

【TypeScript】类型兼容(协变、逆变和双向协变)

跟着小满zs 学习 ts&#xff0c;原文&#xff1a;学习TypeScript进阶类型兼容_typescript进阶阶段类型兼容 小满-CSDN博客 类型兼容&#xff0c;就是用于确定一个类型是否能赋值给其他的类型。如果A要兼容B 那么A至少具有B相同的属性。 // 主类型 interface A {name: string,a…

边界内聚和耦合

内聚 功能内聚 功能内聚是软件工程中一个重要的概念&#xff0c;它描述了一个模块内部各个元素之间的紧密程度。一个具有高功能内聚的模块意味着其内部的各个组件都共同完成一个具体的、明确的功能&#xff0c;并且这些组件之间的联系不是偶然的&#xff0c;而是因为它们共同服…

快手爬票概述

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 无论是出差还是旅行&#xff0c;都无法离开交通工具的支持。现如今随着科技水平的提高&#xff0c;高铁与动车成为人们喜爱的交通工具。如果想要知道…

【C语言】联合(共用体)

目录 一、什么是联合体 二、联合类型的声明 三、联合变量的创建 四、联合的特点 五、联合体大小的计算 六、联合的应用&#xff08;判断大小端&#xff09; 七、联合体的优缺点 7.1 优点 7.2 缺点 一、什么是联合体 联合也是一种特殊的自定义类型。由多个不同类型的数…

SqlSugar 集成

1 关于 SqlSugar SqlSugar 是 .NET/C# 平台非常优秀的 ORM 框架&#xff0c;目前 Nuget 总下载突破 700K&#xff0c;Github 关注量也高达 3.2K&#xff0c;是目前当之无愧的国产优秀 ORM 框架之一。 SqlSugar 官方地址&#xff1a;果糖网 &#xff08; SqlSugar 官网 &#…

LVS三种负载均衡模式:NAT、Tunneling和DR的技术对比

1. LVS-NAT 模式的特性 IP使用&#xff1a;RS&#xff08;Real Server&#xff09;应使用私有地址&#xff0c;RS的网关必须指向DIP&#xff08;Director IP&#xff09;。网络范围&#xff1a;DIP和RIP必须在同一个网段内。数据包处理&#xff1a;请求和响应报文都需要经过Di…

Vue 3 组合式编程:革新前端开发的新时代

Vue.js作为一种流行的前端框架&#xff0c;因其简洁、灵活和高性能而深受开发者喜爱。随着前端开发需求的不断演变和复杂度的增加&#xff0c;Vue.js也在不断地进化和改进。Vue 3的推出标志着Vue.js进入了一个新的阶段&#xff0c;其中最重要的一个变化就是引入了组合式编程&am…

数据库开发——并发控制(第十一章)

文章目录 前言并发执行例题一、封锁二、封锁协议三、可串行调度四、总结 学习目标&#xff1a;重点为并发控制的基本概念及几个基本协议 前言 数据库管理系统必须提供并发控制机制&#xff0c;保证事务的隔离性和一致性 并发执行例题 一、封锁 排他锁称为写锁&#xff0c;共…

react-redux搭建及不同版本间的对比

一.经典版 1. 安装Redux和React Redux npm install redux react-redux 2. 创建action // actions/counterActions.js export const increment () > {return {type: INCREMENT}; };export const decrement () > {return {type: DECREMENT}; };export const add (amo…

atmega8 上传程序

使用icsp 烧写时先关闭串口程序&#xff0c;与串口uart连接相关的电路勿于电脑连接 接触不良 1.使用icsp 上传 1&#xff09;可以直接上传程序 如官方示例blink 或是 serial示例 2&#xff09;可以先烧录bootload 方便下次使用串口上传程序代码 A)使用专门的icsp 上传器上传…

关于二分法的理解(以JS为例)

算法介绍 基本概念 二分查找算法&#xff0c;又称折半查找算法&#xff0c;是一种在有序数组中查找特定元素的高效方法。它的核心思想是将数组分成两半&#xff0c;然后根据目标值与中间元素的比较结果来决定是继续在左半部分还是右半部分进行搜索。 工作原理 初始化&#…

【iOS】如何断点看系统方法在哪一个库

如何断点看系统方法在哪一个库 开源网站如何断点看系统方法在哪一个库1 下符号断点2 符号断点中输入 load &#xff0c;并且开启断点&#xff08;Enable&#xff09;。3 运行程序&#xff0c;触发断点&#xff0c;在堆栈信息中找到load方法&#xff0c;可以看到其在libobjc.A.d…

程序员的wsl2

坑 wsl无法打开 上班时打开wsl2提示 WSL 正在完成升级... Could not write value to key \SOFTWARE\Classes\Directory\shell\WSL. Verify that you have sufficient access to that key, or contact your support personnel. 原因未知&#xff0c;之前并没有更新过&#xff…