-- 语法 DELIMITER 自定义结束符 -- 因存储过程体含分号,需临时修改SQL结束符(如$) CREATEPROCEDURE 存储过程名(参数列表) BEGIN -- 存储过程体(SQL语句集合) END 自定义结束符 DELIMITER ; -- 恢复默认结束符(;)
参数列表格式:
参数由 “参数模式 + 参数名 + 数据类型” 组成,支持三种模式:
IN:输入参数(调用时需传入值)。
OUT:输出参数(作为返回值,需用用户变量接收)。
INOUT:既作为输入,也作为输出。
调用存储过程
1
CALL 存储过程名(参数列表); -- 参数列表需与定义时的顺序和模式匹配
删除存储过程
1
DROPPROCEDURE [IFEXISTS] 存储过程名; -- 一次只能删除一个存储过程
查看存储过程信息
1 2 3 4 5
-- 查看存储过程的创建语句 SHOWCREATEPROCEDURE 存储过程名;
-- 查看当前数据库中所有存储过程 SELECTnameFROM mysql.proc WHERE db = '数据库名'ANDtype = 'PROCEDURE';
存储过程示例详解
示例 1:无参数的存储过程
创建一个查询所有学生信息的存储过程:
1 2 3 4 5 6 7 8 9
DELIMITER $ CREATEPROCEDURE getAllStudents() BEGIN SELECT * FROM student; -- 存储过程体(单条SQL可省略BEGIN...END) END $ DELIMITER ;
-- 调用 CALL getAllStudents();
示例 2:带 IN 参数的存储过程
根据学生 ID 查询其姓名和所属班级:
1 2 3 4 5 6 7 8 9 10 11 12
DELIMITER $ CREATEPROCEDURE getStudentInfo(IN stu_id INT) -- 输入参数:学生ID BEGIN SELECT s.name AS 学生姓名, c.name AS 班级名称 FROM student s JOINclass c ON s.class_id = c.id WHERE s.id = stu_id; END $ DELIMITER ;
-- 调用(查询ID=1的学生) CALL getStudentInfo(1);
示例 3:带 OUT 参数的存储过程
查询学生 ID 对应的姓名,并通过 OUT 参数返回:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
DELIMITER $ CREATEPROCEDURE getStudentName( IN stu_id INT, -- 输入参数:学生ID OUT stu_name VARCHAR(50) -- 输出参数:学生姓名 ) BEGIN SELECTnameINTO stu_name -- 将查询结果赋值给OUT参数 FROM student WHEREid = stu_id; END $ DELIMITER ;
DELIMITER $ CREATEPROCEDURE batchInsertTestData(INcountINT) BEGIN DECLARE i INTDEFAULT1; -- 局部变量:循环计数器 WHILE i <= count DO -- 循环插入 INSERTINTO test_data (content) VALUES (CONCAT('测试数据', i)); SET i = i + 1; ENDWHILE; END $ DELIMITER ;
v1.3.10