[沫忘录]MySQL储存对象

[沫忘录]MySQL储存对象

视图

视图本质是对原表(基表)显示上的裁剪,可以当作表进行操作,其操作的结果会直接反馈到原表上,即对视图的操作实质上是对原表的操作。
MySQL不仅支持为基表创建视图,同时也支持为视图创建视图。

基本语法
视图创建
CREATE [OR REPLACE] VIEW 视图名称 AS SELECT语句 [WITH [CASCADED | LOCAL] CHECK OPTION]视图查询
#查看创建视图语句
SHOW CREATE VIEW 视图名称;
#查看视图数据(把视图当表操作)
SELECT * FROM 视图名称...;视图修改
#方式一
#同视图创建,使用关键字OR REPLACE
#方式二
ALTER VIEW 视图名称 AS SELECT语句 [WITH [CASCADED | LOCAL] CHECK OPTION]视图删除
DROP VIEW [IF EXISTS] 视图名称
检查选项

当我们创建视图时,添加了限制条件,例如只查询id>10的数据,那么创建的数据只会引用id>10的数据。如果我们通过视图添加了id<10的数据,虽然数据会添加到基表,但视图仍只会显示id>10的数据。这再次表明视图是对基表显示上的裁剪。

但很多时候我们希望对基表的操作限制在视图范围内,避免在视图范围内"不可视"的操作,而增加检查选项可以有效解决这一问题。

检查选项可以有效检查插入、更新和删除等操作,以使其符合视图的定义。

WITH CASCADED CHECK OPTION
#向上检查所有视图及父视图是否满足视图范围
WITH LOCAL CHECK OPTION
#只检查当前视图是否满足视图范围#当我们在视图中插入数据时,会向上检查所有父视图是否有检查选项。
更新及作用

视图的更新

如果视图中某一待修改元组不是基表上对应元组的子集,则该视图无法被更新。

怎样会造成元组无法对应的情况呢?

  1. 使用聚合函数(COUNT, MAX, SUM)、窗口函数或GROUP BY等会造成多对一字段、一对多字段或字段对应函数计算值。
  2. 使用DISTINCT、HAVING 或UNION(UNION ALL)等关键字时,会导致元组的索引条件不明确,无法定位到对应基表上的元组,故无法更新。

视图作用

  • 便捷性

    常用的SQL查询可被定义为视图,减少了数据范围和查询条件,既简化用户对数据的理解,也简化对数据的操作。

  • 安全性

    数据库只能数据库和表进行权限操作。而通过视图则将权限操作限定到行和列。这样通过视图用户只能查询和修改他们所能见到的数据。

  • 数据独立性

    当表的某字段名发生变化时,往往需要修改和此字段相关的所有SQL语句。而创建视图时为修改字段起固定别名能否屏蔽这种变化,使基于此视图的SQL语句都不会受到影响。

存储过程

储存过程是事先经过编译并储存在数据库中的一段SQL语句的集合(类似于函数对整块执行逻辑的封装)。这种封装能够有效简化开发人员的很多工作,减少数据在数据库和应用服务器之间的传输(调用存储过程可减少对SQL语句的调用次数),对于提高数据处理过程的效率是有好处的。

  • 特点

    1. 封装性和复用性。
    2. 能够接受传出数据。
    3. 减少网络交互,效率提升。
存储过程语法
#创建
CREATE PROCEDURE 存储过程名称([参数列表])
BEGINSQL语句;
END;#调用
CALL 名称([参数]);#查看
#查看指定数据库的所有存储过程的属性信息
SELECT * FROM information_schema.ROUTINES WHERE = '数据库名';
#查看储存过程的创建语句
SHOW CREATE PROCEDURE 名称;#删除
DROP PROCEDURE [IF EXISTS] 存储过程名称;

特别注意:

在储存过程中SQL语句以分号结尾,储存过程结束也是以分号结尾,而在命令行中分号是执行结束的标志,因此我们需要重新设置结束符。

#手动设置结束符
delimiter $$(可设置为其他符号)
变量

系统变量

​ MySQL服务器提供, 属服务层。分为全局变量(GLOBAL)、会话变量(SESSION)。

#查看系统变量
SHOW [GLOBAL|SESSION] VARIABLES [LIKE ''];
SELECT @@[GLOBAL|SESSION] 指定系统变量名;#设置系统变量
SET [SESSION | GLOBAL] KEY = VALUE;
SET @@[SESSION | GLOBAL] KEY = VALUE;

用户定义变量

​ 用户变量不需提前声明,使用时直接用"@变量名"使用即可。作用域为当前连接。

#赋值
SET @VAR =[| :=] VALUE[,@VAR2=VALUE2]...;
SELECT @VAR =[| :=]VALUE[...];
SELECT 字段值 INTO @VAR FROM 表名;#将查询结果储存进用户变量。#查询
SELECT @VAR;

局部变量

​ 局部变量在局部生效。访问前需要declare声明。可作为储存过程内的局部变量和输入参数。

#声明
DECLARE 变量名 变量类型[default 默认值];#赋值操作同用户变量
if
IF 条件1 THEN
...
ELSEIF 条件2 THEN 
...
ELSE
...
END IF;
参数IO
  • IN: 参数输入,调用时的传入值
  • OUT: 参数输出,参数能做返回值
  • INOUT: 输入输出参数
CREATE PROCEDURE 储存过程名([IN|OUT|INOUT 参数名 参数类型])
...
#示例
CALL p1(input, @outout);
case
CASE 判断值WHEN 值1 THEN ...[WHEN 值2 THEN ...][ELSE ...]
END CASE;
#-----------------------
CASE WHEN 条件1 THEN ...[WHEN 条件2 THEN ...][ELSE ...]
END CASE;
while
WHILE 条件 DOSQL逻辑...
END WHILE;
repeat
REPEATSQL逻辑UNTIL 条件
END REPEAT
loop

​ loop循环没有退出条件,需配合中断语句来使用。

  • LEAVE: 在循环中退出循环(break)
  • ITERATE: 在循环中跳过本轮(continue)
[label:]LOOPSQL 逻辑...
END LOOP [label];
#----------------
LEAVE label;
ITERATE label;
游标cursor

​ 游标是用来储存结果集的数据类型,在储存过程和函数中可以使用游标对结果进行循环的处理。

#声明游标, 游标使用的局部变量的声明应先于游标
DECLARE 游标名 CURSOR FOR 查询语句
#打开游标
OPEN 游标名;
#获取游标内数据
FETCH 游标名 INTO 变量[,变量2]...;#变量数等同于游标行字段数
#关闭游标
CLOSE 游标名;

当游标内有多行数据,就需要通过循环进行取值,但我们需要通过一些手段使游标内数据读完时能够退出循环——条件处理程序。

条件处理程序(handler)

​ 条件处理程序能够处理在流程控制结构执行过程中遇到问题时相应的处理步骤。

DECLARE handler_action HANDLER FOR contition_variable [,...] statement;
handler_action:CONTINUE: 继续执行EXIT: 终止退出
condition_value:SQLSTATE sqlstate_value(状态码, 如02000)SQLWARNING(所有以01开头的SQLSTATE代码简写)NOT FOUND(所有以02开头的SQLSTATE代码简写)SQLEXCEPTION(所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码简写)
statement:当handler满足时执行的SQL语句

存储函数

在这里插入图片描述

存储函数适用场景被储存过程覆盖,故存储函数较少用。

触发器

触发器是与表有关的数据库对象,能够在insert/update/delete前后执行定义的SQL语句集合。这种特性可以辅助完成数据完整性确保,日志记录和数据校验等操作。

使用别名OLD和NEW可以引用发生变化前后的数据。同时触发器只支持行级触发,不支持语句级触发。
tip: 行级触发指SQL语句对多行数据(元组)造成修改时(例如update更新多行),会触发对于次数的触发器操作。而语句级触发无论对多少行数据造成修改,都只触发一次。

基本语法
#创建
CREATE TRIGGER 触发器名字 BEFORE|AFTER INSERT|UPDATE|DELETE ON 表名 FOR EACH ROW
BEGIN SQL语句
END;#查看
SHOW TRIGGERS;#删除
DROP TRIGGER [schema_name.]trigger_name; 
如果没有指定schema_name数据库名,则默认当前所在数据库

ate更新多行),会触发对于次数的触发器操作。而语句级触发无论对多少行数据造成修改,都只触发一次。

基本语法
#创建
CREATE TRIGGER 触发器名字 BEFORE|AFTER INSERT|UPDATE|DELETE ON 表名 FOR EACH ROW
BEGIN SQL语句
END;#查看
SHOW TRIGGERS;#删除
DROP TRIGGER [schema_name.]trigger_name; 
如果没有指定schema_name数据库名,则默认当前所在数据库

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

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

相关文章

Bumblebee X系列用于高精度机器人应用的新型立体视觉产品

Bumblebee X是最新的GigE驱动立体成像解决方案&#xff0c;为机器人引导和拾取应用带来高精度和低延迟。 近日&#xff0c;51camera的合作伙伴Teledyne FLIR IIS推出一款用于高精度机器人应用的新型立体视觉产品Bumblebee X系列。 Bumblebee X产品图 BumblebeeX系列&#xff…

百度云内容审核快速配置 (java)

为什么要选择百度云 &#xff1f; 因为他免费用一年 首先要先开通百度云内容安全服务 按照操作指引走完整套 ContentCensor Java SDK目录结构** com.baidu.aip├── auth //签名相关类├── http //Http通…

IDEA 好用的插件

图标插件&#xff1a;Atom Material Icons 此插件的作用就是更好的显示各种文件的类别&#xff0c;使之一目了然 汉化包 Chinese ​(Simplified)​ Language Pack / 中文语言包 作用就是 汉化 AI编码助手 GitHub Copilot AI编码助手&#xff1a;提示代码很好用 缺点&#xff1a…

使用perf查看热点函数和系统调用最大延迟函数

1、安装perf工具 1.1、ubuntu 18.04 x86下的安装 安装sudo apt install linux-source sudo apt install linux-tools-uname -r # ubuntu 18.04虚拟机实操可行 1.2、ubuntu 18.04 ARM下的安装 参考 Nvidia Jetson系列产品安装Perf ​ARM64版本的Ubuntu上安装perf 与参考文…

windows11获取笔记本电脑电池健康报告

笔记本电脑的电池关系到我们外出时使用的安全&#xff0c;如果电池健康有问题需要及时更换&#xff0c;windows系统提供了检查电池健康度的方法。 1、打开命令行 1&#xff09;键入 winR 2&#xff09;键入 cmd 打开命令行。 2、在命令行运行如下指令&#xff0c;生成电池健…

DI-engine强化学习入门(九)环境包裹器(Env Wrapper)

在强化学习中&#xff0c;环境&#xff08;Environment&#xff09;是智能体&#xff08;Agent&#xff09;进行学习和互动的场所&#xff0c;它定义了状态空间、动作空间以及奖励机制。Env Wrapper&#xff08;环境包装器&#xff09;提供了一种方便的机制来增强或修改原始环境…

很好的Baidu Comate,使我的编码效率飞起!

文章目录 背景及简单介绍Baidu Comate安装功能演示总结 &#x1f381;写在前面&#xff1a; 观众老爷们好呀&#xff0c;这里是前端小刘不怕牛牛频道&#xff0c;今天牛牛在论坛发现了一款便捷实用的智能编程助手&#xff0c;就是百度推出的Baidu Comate。下面是Baidu Comate评…

MT3034 算术招亲

跟MT3033新的表达式类似&#xff0c;只多了一个括号合法性的判断 #include <bits/stdc.h> using namespace std; const int N 40; bool tag[N]; bool is_op(char c) {return c || c - || c * || c / || c ^; } int priority(char op) { // 优先级排序if (op ||…

vector、heap数组、stack数组访问性能验证

测试目的 本次测试旨在比较不同数据结构&#xff08;vector、数组&#xff09;以及不同访问方法&#xff08;[]、at()、offset&#xff09;在性能上的差异&#xff0c;从而为开发者提供在特定情境下做出最佳选择的依据。 测试代码 测试网址:Quick C Benchmarks 使用GCC9.5 …

微服务项目实战-黑马头条(十三):持续集成

文章目录 项目部署_持续集成1 今日内容介绍1.1 什么是持续集成1.2 持续集成的好处1.3 今日内容 2 软件开发模式2.1 软件开发生命周期2.2 软件开发瀑布模型2.3 软件的敏捷开发 3 Jenkins安装配置3.1 Jenkins介绍3.2 Jenkins环境搭建3.2.1 Jenkins安装配置3.2.2 Jenkins插件安装3…

中仕公考:非应届生能考军队文职吗?

军队文职考试的招生对象主要针对普通高等学校的毕业生以及社会人才&#xff0c;报考条件中并没有限制考生必须是应届毕业生。所以&#xff0c;往届毕业生也是具备报考资格的&#xff0c;只需其满足相关的申请条件即可。 报考人员可大致分为三类&#xff1a;普通高校毕业生、社…

Linux中云盘/磁盘,爆满处理方式

1&#xff1a;du和df命令查看磁盘大小不一致 以下是阿里云服务器云盘使用率 运行 du -sh / 大小为20g 我的服务器大小为40g 按道理说这个云盘使用率应该是百分之五十 而运行 df -h / 这个命令是跟这个云盘使用率差不多的。 1.1分析原因 我安装了mysql&#xff0c;nginx…

微信投票小程序源码系统 独家支持礼物投票 道具投票盈利能力超强 带完整的安装代码包以及搭建教程

微信小程序的快速发展&#xff0c;各类应用场景层出不穷&#xff0c;其中投票小程序因其广泛的适用性和互动性&#xff0c;成为了许多企业和个人推广、活动的首选工具。小编给大家分享一款微信投票小程序源码系统&#xff0c;该系统以其独特的礼物投票和道具投票功能&#xff0…

公众号流量主的收益怎么样?

公众号之前是一个私域平台&#xff0c;没有粉丝基本是没有推荐的&#xff0c;所以之前入门的门槛还是很高的&#xff0c;但是今年公众号和视频号改变了推流的机制&#xff0c;现在发的文章会进入到流量池中&#xff0c;进入到公域流量&#xff0c;所以发布的优质文章会大爆的&a…

大模型驱动的新一代 BI 平台,Sugar BI 开启智慧决策新模式

本文整理自 2024 年 4 月 16 日的 2024 百度 Create 大会上的《大模型驱动的新一代 BI 平台如何开启智慧决策》分享。 全文包括了可视化 BI 分析技术架构、智能图表推荐策略与规则设计、Sugar Bot 智能问数的技术实现流程&#xff0c;以及目前的场景应用等。 1 Sugar BI 产…

C#语言基础

一、复杂数据类型 1. 枚举 1.1 基本概念 1.1.1 枚举是什么 枚举是一个被命名的整型常量的集合&#xff0c;一般用它来表示状态、类型等等 1.1.2 申明枚举和申明枚举变量 申明枚举和申明枚举变量是两个概念 申明枚举&#xff1a;相当于是创建一个自定义的枚举类型 申明枚…

python爬虫(二) 之 42号网汽车文章爬虫

python爬虫&#xff08;二&#xff09; 之 42号网汽车文章爬虫 今天在咸鱼上有个买家找我一个42号网汽车文章的爬虫&#xff0c;目前需求已经做完了&#xff0c;现在将这部分代码开源&#xff0c;供大家参考。爬虫能够抓取到网站上所有文章的数据&#xff0c;大概一小时左右就…

一款功能强大的网络安全综合工具-PotatoTool

一、 简介 这款工具是一款功能强大的网络安全综合工具&#xff0c;旨在为安全从业者、红蓝对抗人员和网络安全爱好者提供全面的网络安全解决方案。它集成了多种实用功能&#xff0c;包括解密、分析、扫描、溯源等&#xff0c;为用户提供了便捷的操作界面和丰富的功能选择。 二…

「YashanDB迁移体验官」Oracle向YashanDB迁移的丝滑体验

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

一起深度学习

CIFAR-10 卷积神经网络 下载数据集构建网络运行测试 下载数据集 batchsz 32cifar_train datasets.CIFAR10(data,trainTrue,transformtorchvision.transforms.Compose([torchvision.transforms.Resize((32,32)),torchvision.transforms.ToTensor()]),downloadTrue)cifar_train …