存储过程和函数
类似于Java中的方法,提高代码的重用性,简化操作。
存储过程
一组预先编译好的SQL语句的集合。减少了编译次数、数据库服务器的连接次数,提高效率。
- 存储过程的创建
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
SQL处理逻辑;
END
参数列表:
- 参数模式 参数名 参数类型
举例:
参数模式:IN name VARCHAR(20)
IN:传入参数,调用需要传入值。
OUT:传出参数,可以作为返回值
INOUT:该参数既可以作为输入也可以作为返回参数使用。 - 如果存储过程中只是包含一句话,BEGIN END可以省略。
- 存储过程中的每条SQL语句结尾必须加 “;”
- 调用存储过程
CALL 存储过程名(参数列表);
空参列表存储过程使用案例
插入到student表中3条记录,
以下语句需要在CMD命令窗口登录Mysql,然后操作。
调用,注意这里必须以====结尾的。
查看数据是否插入
创建带IN模式参数的存储过程
案例:根据传入的name参数,查询对应的年龄
CREATE PROCEDURE myp4(IN stuname VARCHAR(20))
BEGIN
SELECT stu_Name,age FROM student_infos WHERE stu_Name = stuname;
END;
#调用
CALL myp4('李四');
案例:根据传入的多个参数,查询学生信息是否存在
CREATE PROCEDURE myp5(IN name VARCHAR(20),IN age INT)
BEGIN
DECLARE result INT DEFAULT 0;
SELECT COUNT(*) INTO result FROM student s WHERE s.stu_Name = name AND s.age=age;
SELECT IF(result>0,'成功','失败');
END;
# 调用
CALL myp5('王五',22);
创建带OUT模式的存储过程
案例:根据学生学号返回学生姓名
CREATE PROCEDURE myp6(IN stuNo VARCHAR(20),OUT result VARCHAR(20))
BEGIN
SELECT s.stu_Name INTO result FROM student s WHERE s.stu_No=stuNo;
END
# 调用
SET stuName;
CALL myp6('123',stuName);
SELECT stuName;
案例:根据学生学号返回学生姓名、年龄
CREATE PROCEDURE myp7(IN stuNo VARCHAR(20),OUT stuName VARCHAR(20),OUT stuAge INT)
BEGIN
SELECT stu_Name,age INTO stuNo,stuName FROM student WHERE stu_No=stuNo;
END;
# 调用
SET name;
SET age;
CALL myp7('456',name,age);
SELECT CONCAT(name,',',age);
创建带INOUT模式的存储过程
案例:计算给定的两个数字的翻倍值
CREATE PROCEDURE myp8(INOUT a INT,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*3;
END;
# 调用
SET num1=1;
SET num2=2;
CALL myp8(num1,num2);
SELECT CONCAT(num1,',',num2);
删除存储过程
语法:
DROP PROCEDURE 存储过程名;
查看存储过程
SHOW CREATE PROCEDURE 存储过程名;
来源:CSDN
作者:小菜鸟阿庆
链接:https://blog.csdn.net/P923284735/article/details/104654338