MySQL 学习笔记 进阶(存储过程 下,存储函数,触发器,锁 上)

news/2024/11/16 14:38:17/文章来源:https://www.cnblogs.com/handsome-zyc/p/18331961

存储过程

 

存储过程-if判断

  • 语法
IF 条件1 THEN......
ELSEIF 条件2 THEN......
ELSE......
END IF;

 

存储过程-参数

  •  用法
CREATE PROCEDURE 存储过程名称([ IN/OUT/INOUT 参数名 参数类型 ])
BEGIN-- SQL语句
END;

 

存储过程-case

  • 语法一
CASE case_valueWHEN when_value1 THEN statement_list1[ WHEN when_value2 THEN statement_list2 ] ...[ ELSE statement_list ]
END CASE;
  • 语法二
CASE WHEN search_condition1 THEN statement_list1[ WHEN search_condition2 THEN statement_list2 ] ...[ ELSE statement_list ]
END CASE;

 

存储过程-循环

  • while

while循环是有条件的循环控制语句。满足条件后,再执行循环体中的SQL语句。具体语法为:

#先判定条件,如果条件为true,则执行逻辑,否则,不执行逻辑
WHILE 条件 DOSQL逻辑
END WHILE;
  • repeat

repeat是有条件的循环控制语句,当满足条件的时候退出循环。具体语法为:

#先执行一次逻辑,然后判断逻辑是否满足,如果满足,则退出。如果不满足,则继续下一次循环。
REPEAT SQL逻辑...UNTIL 条件
END REPEAT;
  • loop

loop实现简单的循环,如果不在SQL逻辑中增加退出循环的条件,可以用来实现简单的死循环。loop可以配合以下两个语句使用:

LEAVE:配合循环使用,退出循环。

ITERATE:必须用在循环中,作用是跳过当前循环剩下的语句,直接进入下一次循环。

[begin_label:] LOOPSQL逻辑...
END LOOP [end_label];
LEAVE label; -- 退出指定标记的循环体
ITERATE label; -- 直接进入下一次循环

 

存储过程-游标

游标是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、OPEN、FETCH和CLOSE,其语法分别如下。

  • 声明游标
DECLARE 游标名称 CURSOR FOR 查询语句;
  • 打开游标
OPEN 游标名称;
  • 获取游标记录
FETCH 游标记录 INTO 变量 [, 变量 ];

 

存储过程-条件处理程序

条件处理程序可以用来定义在流程控制结构执行过程中遇到问题时相应的处理步骤。具体语法为:

DECLARE handler_action HANDLER FOR condition_value [, condition value] ... statement;handler_actionCONTINUE:继续执行当前程序EXIT: 终止执行当前程序
condition_valueSQLSTATE sqlstate_value: 状态码,如02000SQLWARNING: 所有以01开头的SQLSTATE代码的简写NOT FOUNG: 所有以02开头的SQLSTATE代码的简写SQLEXCEPTION: 所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的简写

 

存储函数

 

存储函数

存储函数是有返回值的存储过程,存储函数的参数只能是IN类型的。具体语法如下:

CREATE FUNCTION 存储函数名称([ 参数列表 ])
RETUREN type [characteristic ...]
BEGIN-- SQL语句RETURN ...;
END;characteristic说明:
DETERMINISTIC: 相同的输入参数总是产生相同的结果
NOT SQL: 不包含SQL语句
READS SQL DATA: 包含读取数据的语句,但不包含写入数据的语句。

 

触发器

 

触发器-介绍

触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并进行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。

使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。

  •  创建
CREATE TRIGGER trigger_name
BEFORE/AFTER INSERT/UPDATE/DELETE
ON tbl_name FOR EACH ROW -- 行级触发器
BEGINtrigger_stmt;
END;
  • 查看
SHOW TRIGGERS;
  • 删除
DROP TRIGGER [schema_name.]trigger_name; -- 如果没有指定schema_name,默认为当前数据库。

 

 

锁-概述

  • 介绍

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU,RAM,I/O)的征用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

  • 分类

MySQL中的锁,按照锁的粒度分,分为以下三类:

    · 全局锁:锁定数据库中的所有表。

    · 表级锁:每次操作锁住整张表。

    · 行级锁:每次操作锁住对应的行数据。

 

锁-全局锁-介绍

全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。

其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。

 

数据库中加全局锁,是一个比较重的操作,存在以下问题:

  1. 如果在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆。
  2. 如果在从库上备份,那么在备份期间从库不能执行主库同步过来的二进制日志(binlog),会导致主从延迟。

在InnoDB引擎中,我们可以在备份时加上参数 --single-transaction参数来完成不加锁的一致性数据备份。

mysqldump --single-transaction -uroot -p123456 itcast > itcast.sql

 

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

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

相关文章

TFA-收集日志及分析

下载https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=272133523880062&id=1513912.1&_afrWindowMode=0&_adf.ctrl-state=fghvcgapa_617a 安装[root@rhel75 ~]# ./ahf_setup AHF Installer for Platform Linux Architecture x86_64AHF Installa…

C# 文件操作

本篇主要记录C#操作文件 相对路径在项目文件...\bin\Debug 目录下 一、写入读取文件写入/// <summary>/// initial 文件写入/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private vo…

Python 环境配置(二)安装jupyter、matplotlib、numpy库

Python 环境配置(二)安装jupyter、matplotlib、numpy库 一、numpypip install numpy二、matplotlibpip install matplotlib 三、jupyter 1、anaconda自带Jupyter 2、pycharm 插件只有 Pycharm 的 Professional 版才支持 Jupyter Notebook,请注意版本3、新建文件#%%import nu…

Meta SAM 2:实时分割图片和视频中对象;Apple Intelligence 首个开发者测试版发布丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点…

Python 环境配置(一)Python、Anaconda、Pycharm的安装

Python 环境配置(一)Python、Anaconda、Pycharm的安装本人之前已安装一次,此次为卸载之后的重新安装。。。一、Python 1、下载 下载官网: 下载链接:Download Python | Python.org勾选 添加到路径 (环境变量)next如图所示之后点close关闭2、验证 win+R cmd: python退出 …

C++ - VS2019配置pthread线程库

1. 说明 在VS里用MS编译器不能直接调用pthread库,需要先自行下载该库:http://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip 解压后用得到的只有Pre-built.2文件夹下的文件。2. 配置 如下图分别配置三大项:包含目录-->...pthreads-w32-2-9-1-releas…

Windows安全策略

Windows 安全策略是系统管理的一部分,用于设置和管理计算机或网络的安全配置。保护系统免受未经授权的访问和其他安全威胁。常见 Windows 安全策略分类: 1. 账户策略 (Account Policies) 账户策略管理用户账户的行为和属性,主要包括: • 密码策略: • 密码历史记录:限制用…

lca总结+树上差分

lca lca简称最近公共祖先——简介在此,不过多赘述 这里主要写的是倍增算法,oi-wiki上用的是vector,由于本人不会,只会用链表,所以这里就放链表的代码了例题加一个数组按倍增数组的方式存距离即可题解——点击查看代码 #include<bits/stdc++.h> #define int long lon…

基于OM6626/NRF528210系列的ESL电子价签应用

在竞争激烈的零售行业,效率和顾客体验至关重要。传统的纸质价签在更新频率、准确性和管理成本上存在诸多不足。而电子价签(ESL,Electronic Shelf Label)作为一种智能化解决方案,正在逐渐取代传统价签,帮助零售商提高运营效率和顾客满意度。01电子价签的优势 电子价签通过…

模拟退火

模拟退火 必须要单独开一个专题来讲模拟退火了。 看到身边很多同学写的模退都是不标准的,步长没有随温度的降低而减小,只能叫随机爬山。 系统的学习模退是跟着 Acwing 的 yxc,他写的模退给人一看就有一种豁然开朗,神清气爽的感觉,让你惊叹天下竟然还有如此精妙的算法。 是…

成为Apache SeaTunnel贡献者的N种方式

如何参与开源贡献参与开源贡献的常见方法有多种:1)参与解答 在社区中, 帮助使用过程中遇到困难的人,帮他们解释框架的用法也算是一种贡献。 2)文档贡献 帮助框架来完善文档,比如说将英文文档翻译为中文,纠正文档里面的错误单词,这 是很多人参与开源贡献的第一步。 3)代…