mysql中的自定义函数和存储过程的学习总结

  • 自定义函数
  • 存储过程
  • 区别

一、自定义函数

自定义函数:用法和内置函数相同,自定义函数需要0个或者多个参数,有一个返回值。

创建自定义函数:

CREATE FUNCTION 函数名
RETURNS 返回值类型
函数主体

关于函数主体:

  • 函数主体由合法的sql语句构成
  • 复合结构需要用BEGIN...END...语句
  • 复合结构可以包含声明,循环,控制结构

不带参数的自定义函数:

CREATE FUNCTION f1()
RETURNS VARCHAR(30)
RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日%H点%i分%s秒‘)

调用
SELECT f1();

带参数的自定义函数:

CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
RETURNS FLOAT(10,2) UNSIGNED
RETURN (NUM1+NUM2)/2;
调用
SELECT(1,2);

二、存储过程

存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单位处理;存储过程的优点是可以增强sql语句的灵活性,实现较快的执行速度

参数类型:

  • IN,表示该参数的值必须在调用的适合被指定
  • OUT,表示该参数的值可以被存储过程改变,并返回
  • INOUT,表示该参数在调用时被指定,并且可以被改变和返回

存储过程的语法和自定义函数差不多:

CREATE PROCEDURE 存储过程的名称 (参数)
BEGIN 
具体的过程体
END

不带参数的存储过程:

DETIMITER //
CREATE PROCEDURE sp1()
 SELECT VERSION();
调用
CALL SP1();

带IN参数的存储过程:

DELIMITER //
CREATE PROCEDURE removeUserById(IN pid INT UNSIGNED)
BEGIN
DELETE FROM users WHERE pid=id;
END
DELIMITER ;
调用
CALL removeUserById(22);

带IN和OUT参数的存储过程:

CREATE PROCEDURE  removeUserByAgeAndReturnInfos(IN page SMALLINT UNSIGNED,OUT deleteUsers,OUT userCounts)
BEGIN
DELETE FROM users WHERE age=page;
SELECT ROW_COUNT() INTO deleteUsers;
SELECT COUNT(id) FROM users INTO userCounts;
END
调用
CALL removeUserByAgeReturnInfos(23,@a,@b);
SELECT @a,@b;

三、区别

  • 存储过程实现的功能要复杂一些,而函数的针对性更强
  • 存储过程可以有多个返回值,函数只能有一个返回值
  • 存储过程一般独立的执行,函数可以用在其他语句中

原文地址:https://www.cnblogs.com/mesunyueru/p/9019728.html