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
热门推荐
如何自制团队头像框
“so as to”和“in order to”两者的正确用法
北京楼市“6·26”新政满月:二手房市场有所复苏
考驾驶证对视力的具体要求是什么?
大风浪航行货物的抗风浪能力
可以用牛奶泡咖啡粉吗?冷萃拿铁咖啡怎么做好喝?
“瘪三”一词的由来:从英语“penniless”到上海方言
又高又大的植物有哪些?它们的特点是什么?
迷人的有声书
猫咪不舒服的表现及常见疾病预防指南
流通股的增加会对股价产生什么影响
持股市值如何影响投资者的决策?这种影响存在哪些变数?
邯郸旅游攻略:穿越三千年,遇见古韵新潮
喉咙一直有痰但没感冒?了解成因与解决方法
小腿肚酸胀是大病前兆吗?一文读懂原因与应对方法
电销外呼机器人 vs 传统电话销售(谁更胜一筹)
什么是婚姻解除
微信语音通话接通后流量还需要经过服务器吗
货币基金的收益受哪些因素影响?如何根据这些因素选择货币基金?
如何评估货币基金的投资价值和风险?这种评估的指标有哪些?
5G网络架构演进对用户体验有什么影响?
99%以上为甲流!多地疾控紧急提醒
学会这6个摄影技巧,手机也能轻松拍出高质量大片!
出行早知道:济南西站停车场停车费用及长期停车方案
国足1-3日本:拼命防守下的定位球之殇,未来路在何方?
【中醫治療】中醫如何為癌症末期病人提高生活品質?
邓丽红:从科研到文化,为中医传承铺就多元之路
如何快速缓解上火引起的牙疼?有哪些有效治疗方法?
北京鸟巢地铁交通指南:最全地铁公交路线及步行指引
春天适合种什么花30种?