MySQL数据库,详解存储过程使用(一)
需求背景介绍
线上程序有时候出现问题导致数据错误的时候,如果⽐较紧急,我们可以写⼀个存储来快速修复这块的数据,然后再去修复程序,这种⽅式我们⽤到过不少。存储过程相对于java程序对于java开发来说,可能并不是太好维护以及阅读,所以不建议在程序中去调⽤存储过程做⼀些业务操作。
关于⾃定义函数这块,若mysql内部⾃带的⼀些函数⽆法满⾜我们的需求的时候,我们可以⾃⼰开发⼀些⾃定义函数来使⽤。
所以建议⼤家掌握mysql中存储过程和⾃定义函数这块的内容
存储过程
概念
⼀组预编译好的sql语句集合,理解成批处理语句。
好处:
• 提⾼代码的重⽤性
• 简化操作
• 减少编译次数并且减少和数据库服务器连接的次数,提⾼了效率。
创建存储过程
create procedure 存储过程名([参数模式] 参数名 参数类型)
begin
存储过程体
end
参数模式有3种:
in:该参数可以作为输⼊,也就是该参数需要调⽤⽅传⼊值。
out:该参数可以作为输出,也就是说该参数可以作为返回值。
inout:该参数既可以作为输⼊也可以作为输出,也就是说该参数需要在调⽤的
时候传⼊值,又可以作为返回值。
参数模式默认为IN。
⼀个存储过程可以有多个输⼊、多个输出、多个输⼊输出参数。
调⽤存储过程
call 存储过程名称(参数列表);
注意:调⽤存储过程关键字是call。
删除存储过程
drop procedure [if exists] 存储过程名称;
存储过程只能⼀个个删除,不能批量删除。if exists:表⽰存储过程存在的情况下删除。
修改存储过程
存储过程不能修改,若涉及到修改的,可以先删除,然后重建。
查看存储过程
show create procedure 存储过程名称;
可以查看存储过程详细创建语句。
示例
示例1:空参列表
创建存储过程
/*设置结束符为$*/
DELIMITER $
/*如果存储过程存在则删除*/
DROP PROCEDURE IF EXISTS proc1;
/*创建存储过程proc1*/
CREATE PROCEDURE proc1()
BEGIN
INSERT INTO t_user VALUES (1,30,'路⼈甲Java');
INSERT INTO t_user VALUES (2,50,'刘德华');
END $
/*将结束符置为;*/
DELIMITER ;
delimiter⽤来设置结束符,当mysql执⾏脚本的时候,遇到结束符的时候,会把
结束符前⾯的所有语句作为⼀个整体运⾏,存储过程中的脚本有多个sql,但是
需要作为⼀个整体运⾏,所以此处⽤到了delimiter。
mysql默认结束符是分号。
上⾯存储过程中向t_user表中插⼊了2条数据。
调⽤存储过程:CALL proc1();
验证效果:
mysql> select * from t_user;
+----+-----+---------------+
| id | age | name |
+----+-----+---------------+
| 1 | 30 | 路⼈甲Java |
| 2 | 50 | 刘德华 |
+----+-----+---------------+
2 rows in set (0.00 sec)
存储过程调⽤成功,test1表成功插⼊了2条数据。
相关文章
- 数据孤岛是业务效率的无声杀手
- 2023展望:新的一年将给大数据分析领域带来什么?
- 阿里云ADB基于Hudi构建Lakehouse的实践
- 大数据在医疗保健领域的使用案例
- 微软增加说明:KB5021751 更新扫描已经 / 即将过时 Office 过程中不会触碰用户隐私
- 2022 Gartner全球云数据库管理系统魔力象限发布 腾讯云数据库入选
- 场景化、重实操,分享一个实时数仓实践案例
- Arctic的湖仓一体践行之路
- 分布式计算MapReduce究竟是怎么一回事?
- 淘系数据模型治理优秀实践
- 大数据分析对医疗保健的影响
- 当我们说大数据Hadoop,究竟在说什么?
- 2022年及以后大数据的五个发展趋势
- 网易严选离线数仓治理实践
- 2023 年数据治理趋势
- 一份“靠谱”的年度经营计划,你学会了吗?
- 漫谈对大数据的思考
- 测试一下,读懂数据的能力,你有吗?
- 用艺术的眼光探索数据之美
- 聊聊数据分析成果如何落地