MySQL存储过程

基于树莓派4B设计的厨房环境监测系统_368 本项目设计并实现了一种基于树莓派4B的厨房环境监测系统,提升厨房使用过程中的安全性与智能化水平。系统采用树莓派4B作为主控核心,集成DHT11温湿度传感器、MQ2烟雾传感器、火焰传感器、光敏传感器、水滴检测传感器等多种传感器,实现对厨房环境温湿度、烟雾、火焰、光照与溢水等参数的实时监测,并通过蜂鸣器进行本地报警。系统通过WIFI连接互联网,利用MQTT协议将环境数据上传至华为云物联网平台,实现远程可视化监控。 阅读详情

1. 创建 PROCEDURE

CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name (parameters)
BEGIN
[statement_list]
END


(1) 存储过程注释:MySQL支持采用--或者/**/注释,其中前者是行注释,后者是段式注释。
(2) 变量首先用declare申明,其中临时变量可以直接以@前缀修饰以供引用。
(3) MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。
(4) 存储过程根据需要可能会有输入、输出、输入输出参数,每个参数默认都是一个IN参数,要指定为其它参数,可在参数名之前使用关键词OUT或INOUT,如果有多个参数用","分割开。
(5) 过程体的开始与结束使用BEGIN与END进行标识。

1.1 BEGIN ... END(复合语句)

BEGIN
[statement_list]
END


a. 存储子程序可以使用BEGIN ... END复合语句来包含多个语句。
b. statement_list代表一个或多个语句的列表。statement_list之内每个语句都必须用分号(;)来结尾。


1.2 DECLARE语句(用来声明局部变量)

DECLARE var_name[,...] type [DEFAULT value]

a. DECLARE仅被用在BEGIN ... END复合语句里,并且必须在复合语句的开头,在任何其它语句之前。
b. 要给变量提供一个默认值,请包含一个DEFAULT子句。如果没有DEFAULT子句,初始值为NULL。
c. 值可以被指定为一个表达式,不需要为一个常数。

1.3 SET语句(变量赋值)

SET var_name = expr [, var_name = expr]

1.4 SELECT ... INTO语句(把选定的列直接存储到变量)

SELECT col_name[,...] INTO var_name[,...] table_expr

a. SELECT语法只有单一的行可以被取回。
b. 用户变量名一般以@开头。
c. 滥用用户变量会导致程序难以理解及管理。
d. SQL变量名不能和列名一样。

例:
SELECT id, name INTO x, y FROM demo LIMIT 1;

1.5 MySQL 存储过程参数类型(in、out、inout)

MySQL 存储过程 in 参数,把数据传给存储过程,存储过程内部可能会修改此参数,但对in类型参数的修改,对调用者来说是不可见的。
MySQL 存储过程 out 参数,从存储过程内部传值给调用者。在存储过程内部,该参数初始值为null,无论调用者是否给存储过程参数设置值。
MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。

a. 如果仅仅想把数据传给 MySQL 存储过程,那就使用“in” 类型参数;
b. 如果仅仅从 MySQL 存储过程返回值,那就使用“out” 类型参数;
c. 如果需要把数据传给 MySQL 存储过程,还要经过一些计算后再传回给我们,此时,要使用“inout” 类型参数。

1.6 if语句

if var = 0 then
    update demo set s1 = s1+1;
else
    update demo set s1 = s1+2;
end if;

1.7 case语句

case var
    when 0 then
        update demo set s1 = s1+1;
    when 1 then
        update demo set s1 = s1+2;
    else
        update demo set s1 = s1+3;
end case;

1.8 while、repeat、loop

while在执行前进行检查条件
    declare var int;
    set var = 0;
    while var < 6 do
        insert into demo values(var);
        set var = var + 1;
    end while;

repeat在执行操作后检查条件
    declare var int;
    set var = 0;
    repeat
        insert into demo values(var);
        set var = var + 1;
    until var >= 5
    end repeat;

loop循环不需要初始条件,这点和while循环相似,同时和repeat循环一样不需要结束条件, leave语句的意义是离开循环。
    declare var int;
    set var = 0;
    LOOP_LABLE: loop
        insert into demo values(var);
        set var = var + 1;
        if var >=5 then
            leave LOOP_LABLE;
        end if;
    end loop;


2. 查看、删除、调用存储过程

(1)删除存储过程
DROP PROCEDURE sp_name;
在一个存储过程中不能删除另一个存储过程,只能调用另一个存储过程

(2)显示数据库中所有存储的存储过程基本信息
SHOW PROCEDURE STATUS;

(3)显示某一个存储过程的详细信息
SHOW CREATE PROCEDURE sp_name;

(4)调用存储过程
call sp_name();
存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

3. 使用游标

3.1 创建游标

游标用declare语句创建。如下面的例子所示:
create procedure test()
begin
    declare cursorTest cursor for select * from demo;
end;

3.2 打开和关闭游标

游标用OPEN CURSOR语句来打开,用CLOSE CURSOR来关闭
open cursorTest;
close cursorTest;

CLOSE释放游标使用的所有内部内存和资源,因此在每个游标不再需要时都应该关闭。在一个游标关闭后,如果没有重新打开,则不能使用它。但是,声明过的游标不需要再次声明,用OPEN语句打开它就可以了。

3.3 使用游标数据

在一个游标被打开后,可以使用FETCH语句分别访问它的每一行。FETCH用来检索当前行的IntersectionName列到您定义的局部变量中。
BEGIN
    DECLARE current_id INT(10);                        -- 声明一个局部变量
    DECLARE cursorTest CURSOR FOR select id from demo; -- 声明一个游标
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done = 1;
    OPEN cursorTest;                       -- 打开游标
        FETCH cursorTest INTO current_id;  -- 获取IntersectionName
        REPEAT                             -- 遍历所有的行
        UPDATE demo SET s1 = s1+1 WHERE id = current_id;
        FETCH cursorTest INTO current_id;  -- 获取IntersectionName
        UNTIL Done END REPEAT;             -- 结束循环
    CLOSE cursorTest;                  -- 关闭游标
END;

Done默认是0,CONTINUE HANDLER 是在条件出现时被执行的代码,SQLSTATE '02000'是一个未找到条件,当REPEAT由于没有更多的行供循环而不能继续时,出现这个条件。

4. 例子

(1)表结构

 create table `record`(
    `id` int(10) not null primary key auto_increment,
    `content` varchar(255),
    `created` datetime not null,
    `updated` datetime not null default '0000-00-00 00:00'
);

(2)根据参数往record表插入N条数据
DELIMITER $$
DROP PROCEDURE IF EXISTS `record_batch` $$
CREATE PROCEDURE `record_batch`(IN record_count int(10))
BEGIN
DECLARE i INT;
SET i = 0;
WHILE i < record_count DO
INSERT INTO `record` (`content`,`created`,`updated`) VALUES ('1234567',Now(),Now());
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL record_batch(10);


(3)修改content列的值

DELIMITER $$
DROP PROCEDURE IF EXISTS `change_record_batch` $$
CREATE PROCEDURE `change_record_batch`()
BEGIN
DECLARE current_record_id INT(10);
DECLARE current_content VARCHAR(255);
DECLARE Done INT DEFAULT 0;
DECLARE res_record CURSOR FOR SELECT record_id, content FROM `record`;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done = 1;

OPEN res_record;
FETCH res_record INTO current_record_id, current_content;
REPEAT
UPDATE `record` SET content = CONCAT('hello, ', current_content) WHERE record_id = current_record_id;
FETCH res_record INTO current_record_id, current_content;
UNTIL Done END REPEAT;
CLOSE res_record;
END$$
DELIMITER ;

CALL change_record_batch();
【赛题解析&命令脚本配置】2024年第十七届山东省技能大赛 | 网络系统管理”赛项-模块B:Linux服务部署 & ⑤客户端OutsideCli和InsideCli工作任务 【赛题解析&命令脚本配置】2024年第十七届山东省技能大赛 | 网络系统管理”赛项-模块B:Linux服务部署 & ⑤客户端OutsideCli和InsideCli工作任务 | 【赛题解析&命令脚本配置】2024年第十七届山东省技能大赛 | 网络系统管理”赛项-模块B:Linux服务部署 & ⑤客户端OutsideCli和InsideCli工作任务 阅读详情

相关推荐

瑞萨RA6M4平台I2C驱动移植实战:MPU6050传感器集成指南

本文详细介绍了在瑞萨RA6M4平台上进行I2C驱动移植并集成MPU6050传感器的实战指南。通过FSP配置工具添加I2C主栈,适配MPU6050官方驱动,实现传感器数据读取与调试,为嵌入式开发提供完整的解决方案。

banana的博客 109

数据库:mysql和sqlserver中批量执行sql语句 & go关键字作用

环境: window10 sqlserver2008 mysql5.7 说明: 在编写后端应用程序时,为了提高响应性能,我们会将多条sql语句放在一起执行,如下: insert into t_user(id,name) values(1,'小明'); insert into t_book(id,name) values(1,'语文'); insert into t_user_book(id,userid,bookid) values(1,1,1); 但是,我们考虑下,如果上面的sql语句出现错误了怎么

火焰 3070

NVIDIA GPU任务调度全景:从Block分配到Warp发射

GPU并行计算的核心是任务调度,而CUDA kernel在GPU上的执行并非简单的一次性操作,而是经过从CPU命令队列到硬件前端,再到GigaThread引擎和Warp Scheduler的多层协同。理解这一过程,是性能优化的基础。Warp作为硬件调度的基本单位,其状态切换与延迟隐藏能力直接决定计算单元的利用率;而Occupancy作为衡量SM上活跃Warp池大小的指标,也并非越高越好,需要结合访存模式与资源占用综合判断。对于多任务并发场景,Stream优先级、计算抢占、MIG硬件隔离与MPS软件共享等机制

weixin_32612263的博客 270

mysql go命令_Go语言操作MySQL

MySQL是常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库。Go操作MySQL连接Go语言中的database/sql包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的数据库驱动。使用database/sql包时必须注入(至少)一个数据库驱动。我们常用的数据库基本上都有完整的第三方实现。例如:MySQL驱动下载依赖使用MySQL驱动func Open(driverName...

weixin_35298139的博客 262

绝缘检测是什么? 绝缘检测原理 绝缘检测检测的是什么?那个量?电压?电流?电阻?

绝缘电阻是电气设备和电气线路最基本的绝缘指标。对于低压电气装置的交接试验,常温下电动机、配电设备和配电线路的绝缘电阻不应低于0.5MΩ(对于运行中的设备和线路,绝缘电阻不应低于1MΩ/kV)。 绝缘电阻的正确测量方法 现代生活日新月异,人们一刻也离不开电。在用电过程中就存在着用电安全问题,在电器设备中,例如电机、电缆、家用电器等。 影响因素 环境温湿度 一般材料的绝缘电阻值随环境温湿度的升高而减小。相对而言,表面电阻(率)对环境湿度比较敏感,而体电阻(率)则对温度较为敏感。 湿度增加,表面泄漏增大,导体电导

dianqicyuyan的博客 2万+

【NVIDIA Jetson Orin系列 - 安装NVIDIA SDK Manager】

NVIDIA Jetson Orin - 安装NVIDIA SDK Manager

dally2的博客 2689

MySQL存储过程详解 mysql 存储过程

mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 一个存储过程是一个可编程的函数,它在数据库中创建并保存

Changgo在IT路上的一路风景 652

Google Cameraserver 看门狗CameraServiceWatchdog超时crash原理分析

本文分析了Android CameraServiceWatchdog机制的工作原理。该看门狗用于监控相机服务关键操作(如close、flush)的超时情况,通过定时器线程检测阻塞问题。文章详细讲解了Watchdog的初始化流程、使能方式、内部定时器机制(默认周期100ms,650次循环触发超时),并提供了configureStreams阶段的客制化实现方案。当检测到超时,Watchdog会触发abort生成tombstone日志,便于调试分析。

1129

mysql存储过程输入参数拆分_MySql带参数存储过程(动态执行SQL语句)

本文分享的这个mysql存储过程是根据用户输入的条件和排序方式查询用户的信息,排序条件可以没有。调用方式:call GetUsersDynamic('age<=30','');代码:复制代码 代码示例:/********动态查询用户的信息********/CREATE PROCEDURE GetUsersDynamic(WhereCondition varchar(500),OrderByE...

weixin_39597636的博客 319

996引擎 - 读写变量性能测试

单轮100万次读写,取3轮平均耗时(毫秒),有效读取率均为100%,数值越小性能越优。

灵台方寸山斜月三星洞 244

097、Zephyr RTOS驱动开发实战:传感器驱动(陀螺仪)

I2C速率别设太高:LSM6DSO支持最高400kHz,但实际布线有寄生电容时,400kHz容易出错。工业产品我统一用100kHz,稳定压倒一切。FIFO水印值要计算:假设ODR=6.66kHz,每150us产生一组数据,如果水印设32组,则每4.8ms触发一次中断。这个间隔要大于I2C读取耗时(实测约200us),否则中断堆积。电源纹波敏感:陀螺仪对电源噪声敏感,特别是3.3V供电时。我遇到过因为DC-DC纹波太大,陀螺仪输出噪声从0.1dps飙升到2dps。

m0_50546716的博客 118

POSTGRESQL学习----函数返回结果集

在psotgresql中好像 funtionn和sp 都统合到funtion上  create function   mmm()    returns   setof   record    as    '    declare    rec   record

993

淘宝滑块验证码破解:Python模拟鼠标轨迹过关详解

本文全面解析了淘宝滑块验证码的破解流程,从机制分析、图像处理、轨迹模拟到自动化实现,提供了完整的Python解决方案。随着2026年风控技术的升级,单纯依靠轨迹模拟已经难以达到高通过率,未来趋势是结合强化学习生成更自然的轨迹,并利用深度神经网络进行端到端的验证码绕过。此外,各大平台正逐步推广"无感验证"和"行为式验证码",将验证融入到用户正常操作中,这对爬虫技术提出了更高的挑战。技术本身是中立的,关键在于使用者的目的。希望本文能帮助开发者更好地理解验证码对抗技术,从而设计出更安全的防御系统。

2201_76125261的博客 95

MySQL的存储过程

概念 MySQL5.0版本开始支持存储过程,存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法,存储过就是数据库SQL与层层面的代码封装与重用 特性 1.有输入输出参数,可以声明变量,有if/else/case/while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能 2.函数的普通特性:模块化,封装,代码复用 3.速度快,只有首次执行需要经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤 格式 创建存储过程 -- 创建存储过

weixin_60589106的博客 5万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

什么是mysql存储过程_mysql 存储过程

存储过程1.什么是存储过程一组可编程函数,是为了满足特定功能的SQL语句集存储过程就是具有名字的一段代码,用来完成个特定的功能创建的存储过程保存在数据库的数据字典中​2.为什么要用存储过程将重复性很高的操作,封装到一个存储过程中,简化了对这些SQL的调用批量处理统一接口,确保数据安全相对于Oracle来说,Mysql的存储过程相对功能较弱,使用较少​3.存储过程的创建和调用1. delimiter...

weixin_31470259的博客 9102

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MySQL存储过程详解 mysql 存储过程

mysql存储过程详解 1.存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做

qq_28807077的博客 2775

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

mysql 存储过程复制_MySQL存储过程

存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用不仅限于批处理。创建存储过程CREATE PROCEDURE productpricing()BEGINSELECT AVG(prod_price)AS priceaverageFROM products;end;此存储过程名为productpricing,用CREATE PROCEDURE ...

weixin_33553051的博客 1609

mysql 存储过程 总结_Mysql存储过程总结

1.关于MySQL的存储过程存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。2MySQL存储过程的创建(1).格式MySQL存储过程创建的格式:CREATE PROCEDURE过程名([过程参数[,......

weixin_33384949的博客 919

什么是mysql存储过程_什么是mysql存储过程

MySQL中的存储过程指的是存储在数据库中的SQL语句集合,当创建好存储过程后在运行时提供所需参数,存储过程就可以以代码指定的方式使用参数执行并返回值在MySQL中提供了创建存储过程的能力。存储过程是MySQL以及其他数据库管理系统中的强大功能。接下来在文章中将为大家具体介绍MySQL中的存储过程,具有一定的参考作用,希望对大家有所帮助。【推荐课程:MySQL教程】存储过程:存储过程指的是存储在数...

weixin_39928233的博客 900

mysql存储过程call_mysql call 存储过程

PHP调用MYSQL存储过程实例PHP调用MYSQL存储过程实例标签:mysql存储phpsqlquerycmd2010-09-26 11:1011552人阅读评论(3)收藏举报实例一:无参的存储过程$conn = mysql_connect('localhost','root','root') o...文章thinkyoung2016-01-20544浏览量存储过程实例存储过程:是为了...

weixin_34981046的博客 2480

MySQL 存储过程

存储过程(Stored Procedure)是一种存储在数据库中的程序,可供外部程序调用的一种数据库对象。存储过程是为了完成特定功能的 SQL 语句集,提供许多过程语言的功能,例如变量定义、条件语句、循环语句、游标以及异常处理等。存储过程没有返回值,但是它可以通过输出参数实现数据的返回,同时还可以产生一个查询结果返回到客户端。存储过程经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)调用执行。存储过程思想上很简单,就是数据库 SQL 语句的封装与重用。

Doublelv 的博客专栏。 3846

mysql fetch 存储过程_【MySQL】存储过程及游标的使用

1. 写在前面本篇内容及部分示例代码基于《MySQL必知必会》,所需要获得和运行的一切东西,可以在http://www.forta.com/books/0672327120/ 上找到,包括两个SQL脚本,create.sql 和 populate.sql。本篇内容的理解同时也参考了MySQL8.0的官方文档《MySQL 8.0 Reference Manual》,若有理解不到位的地方,有能力的小...

weixin_33557333的博客 1358

[MySQL]存储过程

本篇文章阐述的原则是“以吾之理解,着重之阐述”,因此没有那么细致。 如果文中阐述不全或不对的,多多交流。 存储过程的细节很多,而在实际工作中又未必都能涉及这些细节,工作时间一长,就可能忘记,于是特来写这篇文章,既是为自己做个笔记,也是跟大家分享存储过程的学习和使用方法。 参考笔记三,P34.1、P3...

qq_35485206的博客 1420

mysql 分号 存储过程_Mysql之存储过程

1.进入到数据库中查看 是否有相关的存储过程数据show procedure status where Db='test';2.创建简单的存储过程create procedure hi() select 'hello';3. 调用存储过程call hi();事例:三、MySQL 存储过程特点创建 MySQL 存储过程的简单语法为:create procedure 存储过程名字()([in|out|...

weixin_32163411的博客 798

mysql存储过程调试_MYSQL存储过程调试过程

mysql不像oracle有plsqldevelper工具用来调试存储过程,所以有几种简单的方式追踪执行过程:1、用一张临时表,记录调试过程;2、直接在存储过程中,增加select xxx,在控制台查看结果:3、把存储过程的sql复制到navicat查询中,然后SET @num使用自定义变量。实际应用场景是三种方法都会用到,结合不同的场景使用。方法1适用于有多条数据处理,处理结果无法通过变量来存储...

weixin_34954308的博客 3778

mysql 存储过程 退出存储过程

我整理的一些关于【MySQL,SQL】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://edu.51cto.com/surl=QDW3g3MySQL 存储过程:退出存储过程 在数据库编程中,存储过程是一种特殊的程序,它存储在数据库中,可以接受参数,并在需要时被调动。本文将重点讨论在 MySQL 中如何...

weixin_41317210的博客 1060
上一篇: Maven 学习笔记(1)入门篇
下一篇: Java 调用MySQL存储过程
go2shell
博客等级 码龄12年 45粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值