上一篇
场景引入:
凌晨3点,你盯着满屏重复的SQL查询代码抓狂😫,每次报表生成都要手动执行十几条语句,突然想起同事提过的"存储过程"——这个能像函数一样打包SQL的神器!但如何在MySQL命令行里创建它?别急,5分钟让你get新技能!
登录MySQL
mysql -u 用户名 -p
(输入密码后进入mysql>
提示符)
选择数据库
USE 你的数据库名;
✅ 小贴士:用SHOW DATABASES;
可查看所有数据库
默认分号会终止语句,我们需要临时修改:
DELIMITER //
👉 现在所有语句将以作为结束符
以创建"根据部门查员工"的存储过程为例:
CREATE PROCEDURE get_employees_by_dept(IN dept_name VARCHAR(50)) BEGIN SELECT * FROM employees WHERE department = dept_name ORDER BY hire_date DESC; END //
💡 参数说明:
IN
输入参数(还有OUT
/INOUT
) VARCHAR(50)
参数类型和长度 DELIMITER ;
⚠️ 重要!不恢复会导致后续SQL无法正常执行
SHOW PROCEDURE STATUS WHERE Db = '你的数据库名';
或查看具体定义:
SHOW CREATE PROCEDURE get_employees_by_dept;
CALL get_employees_by_dept('研发部');
输出结果就像执行普通查询一样!✨
带OUT参数(返回计算结果)
DELIMITER // CREATE PROCEDURE count_employees(OUT total INT) BEGIN SELECT COUNT(*) INTO total FROM employees; END // DELIMITER ; -- 调用方式 CALL count_employees(@result); SELECT @result AS '员工总数';
错误处理(新增于MySQL 5.5+)
CREATE PROCEDURE safe_update() BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN SELECT '错误发生,事务已回滚' AS message; ROLLBACK; END; START TRANSACTION; -- 你的SQL操作 COMMIT; END //
BEGIN/END
是否配对,参数括号是否正确 GRANT CREATE ROUTINE ON 数据库.* TO '用户'@'主机'
授权 -- 修改(先删除再新建) DROP PROCEDURE IF EXISTS get_employees_by_dept; CREATE PROCEDURE get_employees_by_dept()... -- 直接删除 DROP PROCEDURE 过程名;
sp_
或proc_
/* 功能说明 */
SELECT
模拟结果 现在你可以把那些重复SQL打包成"快捷指令"啦!🚀 下次凌晨加班时,一个CALL
就能搞定所有~
本文由 税贤淑 于2025-07-31发表在【云服务器提供商】,文中图片由(税贤淑)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/493614.html
发表评论