mysql存储过程和函数

社会主义新天地 提交于 2020-03-04 18:17:15

存储过程和函数

类似于Java中的方法,提高代码的重用性,简化操作。

存储过程

一组预先编译好的SQL语句的集合。减少了编译次数、数据库服务器的连接次数,提高效率。

  1. 存储过程的创建
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
	SQL处理逻辑;
END

参数列表:

  • 参数模式 参数名 参数类型
    举例:
    IN name VARCHAR(20)
    
    参数模式:
    IN:传入参数,调用需要传入值。
    OUT:传出参数,可以作为返回值
    INOUT:该参数既可以作为输入也可以作为返回参数使用。
  • 如果存储过程中只是包含一句话,BEGIN END可以省略。
  • 存储过程中的每条SQL语句结尾必须加 “;”
  1. 调用存储过程
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 存储过程名;
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!