MySQL的存储函数与存储过程实例代码分析

发布时间:2023-03-01 14:14:08 作者:iii
来源:亿速云 阅读:131

这篇文章主要介绍了MySQL的存储函数与存储过程实例代码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL的存储函数与存储过程实例代码分析文章都会有所收获,下面我们一起来看看吧。

MySQL存储过程与存储函数的相关概念

存储函数和存储过程的主要区别:

存储过程和函数能后将复杂的SQL逻辑封装在一起,应用程序无需关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可

存储过程

一组预先编译的SQL语句的封装

执行过程:执行过程预先存储在MySQL服务器上,需要执行的时候,客户端只需要向服务器发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列SQL语句全部执行

与视图,函数的对比:

分类

创建存储过程

DELIMITER $

CREATE PROCEDURE 存储过程名 (IN|OUT|INOUT 参数名 参数类型,...)
[characteristics]
BEGIN
存储过程体
END $

DELIMITER ;

DELIMITER $
CREATE PROCEDURE select_all_data()
BEGIN
	SELECT *
	FROM employees;
END $
DELIMITER ;

调用存储过程

CALL select_all_data();

无参数无返回值

DELIMITER //
CREATE PROCEDURE avg_employee_salary()
BEGIN 
	SELECT AVG(salary) FROM emp;
END //
DELIMITER ;
CALL avg_employee_salary();

无参数有返回值

DELIMITER //
CREATE PROCEDURE show_min_salart(OUT ms DOUBLE)
BEGIN 
	SELECT MIN(salary) INTO ms
	FROM emp;
END //
DELIMITER ;
CALL show_min_salart(@ms);
SELECT @ms;

有参数无返回值

DELIMITER //
CREATE PROCEDURE show_someone_salary(IN empname VARCHAR(20))
BEGIN 
	SELECT salary
	FROM emp
	WHERE last_name=empname;
END //
DELIMITER ;
CALL show_someone_salary('Abel');
SET @empname='Abel';
CALL show_someone_salary(@empname)

有参数有返回值

DELIMITER //
CREATE PROCEDURE show_someone_salary2(IN empname VARCHAR(20),OUT empsalary DECIMAL(10,2))
BEGIN 
	SELECT salary INTO empsalary
	FROM emp
	WHERE last_name=empname;
END //
DELIMITER ;
SET @empname='Abel';
CALL show_someone_salary2(@empname,@empsalary);
SELECT @empsalary;

带INOUT

DELIMITER //
CREATE PROCEDURE show_mgr_name(INOUT empname VARCHAR(25))
BEGIN 
SELECT last_name
FROM emp
Where employee_id=
(
	SELECT manager_id 
	FROM emp
	WHERE last_name=empname
);
END //
DELIMITER ;
SET @empname='Abel';
CALL show_mgr_name(@empname);
SELECT @empname;

如何调试

通过SELECT语句,把程序执行的中间结果查询出来,从而调试一个SQL语句的正确性。调试成功之后,把SELECT语句后移到下一个SQL语句,逐步推进查询下一个 SQL语句

存储函数

MySQL允许用户自定义函数,自定义好了之后,调用方式与调用MySQL预定义的系统函数一样

创建存储函数

CREATE FUNCTION 函数名(参数名 参数类型)
RETURUNS 返回值类型
[characteristics]
BEGIN 
    函数体 #函数体中肯定有RETURN语句
END

调用存储函数

SELECT 函数名(实参列表)

练习一

DELIMITER //
CREATE FUNCTION email_by_name()
RETURNS VARCHAR(25)
BEGIN
RETURN
(
	SELECT email
	FROM emp
	WHERE last_name='Abel'
);
END //
DELIMITER ;
SELECT email_by_name();

练习2

DELIMITER //
CREATE FUNCTION email_by_id(emp_id INT)
RETURNS VARCHAR(25)
BEGIN
RETURN
(
	SELECT email
	FROM emp
	WHERE employee_id=emp_id
);
END //
DELIMITER ;
SELECT email_by_id(101);
SET @emp_id=102;
SELECT email_by_id(@emp_id);

存储函数与存储过程的对比

存储过程和函数的查看修改删除

查看

使用SHOW CREATE 语句 查看创建信息

SHOW CREATE PROCEDURE show_mgr_name\G;
SHOW  CREATE FUNCTION email_by_id\G;

使用SHOW STATUS 语句查看存储过程和函数的状态信息

SHOW PROCEDURE STATUS;
SHOW PROCEDURE STATUS LIKE 'show_mgr_name' ;
SHOW FUNCTION STATUS LIKE 'email_by_name' ;

从information_schema.Routines表中查看存储过程和函数的信息

SELECT * FROM information_schema.ROUTINES
WHERE ROUTINE_NAME='email_by_id' AND ROUTINE_TYPE='FUNCTION';
SELECT * FROM information_schema.ROUTINES
WHERE ROUTINE_NAME='show_min_salart' AND ROUTINE_TYPE='PROCEDURE';

修改存储过程与函数

修改存储过程或函数,不影响存储过程或函数功能,只是修改相关特征,使用ALTER语句实现

ALTER PROCEDURE|FUNCTION 存储过程或函数名 [characteristic ...]

删除存储过程或函数

DROP PROCEDURE|FUNCTION [IF EXISTS] 存储过程或函数名

关于“MySQL的存储函数与存储过程实例代码分析”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“MySQL的存储函数与存储过程实例代码分析”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. mysql5.6.15相关问题有哪些
  2. 在一个windows服务下怎么安装多个mysql服务

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:台式电脑没有wifi连接功能如何解决

下一篇:elementui动态级联选择器回显问题怎么解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》