4人参与 • 2026-09-21 • Mysql
很多刚接触mysql的同学,听到存储过程第一反应就是复杂、难上手。其实存储过程本质就是一段预编译在数据库里的sql代码片段,可以封装多条sql,支持入参、逻辑判断,重复调用。
适合场景:业务逻辑固定、需要频繁执行的一组sql,比如批量统计、简单的数据校验、多表联动查询。
提示:存储过程有利有弊,业务复杂项目不建议大量使用,会增加数据库维护与迁移成本,简单场景可以体验。
delimiter:修改语句结束符。mysql默认以;作为结束标记,写存储过程内部会有很多分号,不修改会提前截断语句。create procedure:创建存储过程关键字in:入参,调用时传入,存储过程内部只读(最常用)out:出参,存储过程内部赋值,调用后拿到结果inout:既可以传入,也可以传出修改后的值call 存储名(参数):调用存储过程drop procedure if exists 存储名:删除存储过程我们先写一个不带任何参数的存储过程,作用:查询用户表前10条数据。
-- 如果存在就删除,避免重复创建报错
drop procedure if exists proc_query_user;
-- 修改结束符为$$
delimiter $$
create procedure proc_query_user()
begin
-- 存储过程内部sql
select id, username, create_time from `user` limit 10;
end $$
-- 改回默认结束符
delimiter ;
调用
call proc_query_user();
执行call就会直接执行里面的查询语句。
根据传入用户id,查询单条用户信息,最常用的场景。
drop procedure if exists proc_get_user_by_id;
delimiter $$
create procedure proc_get_user_by_id(in p_user_id int)
begin
select * from `user` where id = p_user_id;
end $$
delimiter ;
调用:
call proc_get_user_by_id(1);
p_user_id是入参,in表示只能传入,存储过程内不能修改对外的值。
示例:统计用户表总数量,通过out参数返回总数
drop procedure if exists proc_count_user;
delimiter $$
create procedure proc_count_user(out p_total int)
begin
select count(*) into p_total from `user`;
end $$
delimiter ;
调用方式,需要定义变量接收输出值:
call proc_count_user(@total); select @total as user_total;
存储过程支持基础流程判断,根据传入分数判断等级,演示if语法:
drop procedure if exists proc_check_score;
delimiter $$
create procedure proc_check_score(in p_score int, out p_level varchar(20))
begin
if p_score >= 90 then
set p_level = '优秀';
elseif p_score >=60 then
set p_level = '及格';
else
set p_level = '不及格';
end if;
end $$
delimiter ;
调用:
call proc_check_score(85, @res); select @res;
-- 查看当前库所有存储过程 show procedure status; -- 查看存储过程创建语句 show create procedure proc_get_user_by_id;
优点
缺点
现在大多数互联网项目,业务逻辑会放在后端代码(java/python/php),存储过程仅用于少量运维、统计脚本。
存储过程并不神秘,就是数据库里封装的一段可调用sql程序。
上手记住几个关键点:
delimiter临时修改结束符in/out/inoutbegin...end包裹内部代码call()调用学会简单存储过程,可以用来写数据统计、一次性批量脚本,但不要过度依赖,优先把业务逻辑放在应用层。
到此这篇关于mysql创建简单存储过程的新手入门教程的文章就介绍到这了,更多相关mysql创建存储过程内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论