MySQL存储过程的实现及其高级特性的应用
创作时间:
作者:
@小白创作中心
MySQL存储过程的实现及其高级特性的应用
引用
CSDN
1.
https://blog.csdn.net/zhouwensmile/article/details/143624290
MySQL存储过程是数据库管理中的重要工具,它能够帮助开发者实现复杂数据库操作的自动化,提高数据库管理效率。本文详细介绍了MySQL存储过程的各种功能和技术细节,包括变量的定义与赋值、传入与传出参数、条件语句(如if-then-else)、循环语句(如while和repeat)、游标的使用方法、函数的定义与使用以及事件调度器(Event)。同时,还包括了一些高阶特性和综合案例,如使用Python脚本与MySQL存储过程结合进行数据归档和清理。
变量
变量赋值1
DROP PROCEDURE IF EXISTS employees.testc ;
DELIMITER $$ -- 在一个成熟的sql客户端中这些语句都用自己写
$$ -- 自用写好create procedure的主体内容就行
CREATE DEFINER=`root`@`localhost` PROCEDURE `employees`.`testc`()
begin
declare my_uname varchar(32) default ''; -- 定义一个变量
set my_uname = 'duohappy'; -- 给变量赋值
select my_uname; -- 显示这个变量
end $$
DELIMITER ;
变量赋值2
CREATE DEFINER=`root`@`localhost` PROCEDURE `employees`.`testc`()
begin
declare my_uname varchar(32) default ''; -- 定义一个变量
select first_name into my_uname from employees where emp_no = 10001; -- 给变量赋值
select my_uname; -- 显示这个变量
end
变量的作用范围
CREATE DEFINER=`root`@`localhost` PROCEDURE `employees`.`testc`()
begin
declare emp_cnt int default 0; -- 全局变量
declare title_cnt int default 0;
begin
select count(*) into emp_cnt from employees;
select count(*) into title_cnt from titles;
select emp_cnt, title_cnt; -- 可以调用emp_cnt,title_cnt
end;
begin
declare max_birth date;
declare min_birth date;
select max(birth_date), min(birth_date) into max_birth, min_birth from employees;
select emp_cnt, title_cnt, max_birth, min_birth; -- 同样可以调用
end;
end
传参
传入参数 in
CREATE PROCEDURE employees.testa(in my_emp_no int) -- 参数类型是int,用来传入
begin
declare my_birth date;
select birth_date into my_birth from employees where emp_no = my_emp_no;
select my_emp_no, my_birth;
END
传出参数 out
CREATE PROCEDURE employees.testa(in my_emp_no int, out my_birth date) -- 传入,传出参数
begin
select birth_date into my_birth from employees where emp_no = my_emp_no;
select my_emp_no, my_birth; -- 外部定义了变量接收这个传出参数的话,可以不用在内部select
END
在调用的时候,必须定义一个变量,用于接收传出参数的值
命令行操作
set @my_birth := ''; -- 定义一个变量
call testa(10001, @my_birth); -- 变量用于接收传出参数
select @my_birth; -- 得到变量的值
传入传出参数 inout
CREATE PROCEDURE employees.testa(inout my_emp_no int, inout my_birth date) -- 传入传出
begin
set my_emp_no = 10001;
set my_birth = 0;
select my_emp_no, birth_date into my_emp_no, my_birth from employees where emp_no = my_emp_no;
END
可以传出传入,那么可以方便的在外部接收变量
命令行操作
set @my_emp_no := 0; -- 定义一个变量
set @my_birth := 0;
call testa(@my_emp_no, @my_birth);
select @my_emp_no, @my_birth;
条件语句
if-then-else-end if
热门推荐
《高达SEED 重制版》:经典重塑,情感与战争的深度探讨
宝鸡陈仓老街:一条街逛遍陕西美食和历史
女娲:中华最伟大的创世女神
欧拉与他的“欧拉线”
Eur J Pediatr:日本试管婴儿与自然受孕儿童长期健康结果的比较
十秒快速打嗝排气的方法
如何选购家用保险柜?家用保险柜应该买哪种比较适合?
ANSYS FLUENT网格划分实战教程:从模型导入到网格导出
镇江“花式”夜 夜夜有精彩
《我的世界》末地冒险完全攻略:从入门到击败末影龙
热门网文IP改编微短剧汇总!
哪些胸痛要去医院?中医怎么治疗胸痛?专家这样说
金庸最厉害的十大武功,易筋经第十,太玄经第二,第一名竟是剑法
孕期饮品选择:椰子水虽好,适量为宜,精选椰子水,助力孕期健康
唐朝头饰文化:从简朴到奢华的华丽蜕变
2025年刚过,本田就召回136.7万辆!快看你的车中招了吗!
二战名将,“沙漠之狐”隆美尔为何神秘死亡?希特勒受不了他
婚前房产影响婚后首套房吗?一文详解相关法律问题
广州到武汉的距离及出行方式解析
西京学院:特色发展强化优势 培养创新型应用人才
人民日报 | 中医药国际认可度和影响力持续提升
一张图读懂:孩子何时需要接种破伤风疫苗?
无锡实施"一院一策"方案,有效缓解医院停车难
有效消除痘印的全面指南:生活习惯与护肤技巧相结合
中国新能源产业真本事从何而来
山料一定比籽料差吗?
形而上学及其在人类思想中的十大应用实例
服用华法林期间的饮食注意事项
中医治疗糖尿病胃轻瘫,解决胃肠、胃痛、不消化、大便溏等恼人问题!
养金丝熊的注意事项(成年金丝熊的饲养要点)