1.函数的定义
函数是一段可以重复使用的代码,它接收输入参数,执行特定的逻辑,并返回一个结果。MySQL 中的函数分为两类:
-
内置函数:MySQL 自带的函数,如
SUM()
、COUNT()
、NOW()
等。 -
用户自定义函数:用户通过
CREATE FUNCTION
语句定义的函数。
用户自定义函数可以返回一个标量值(单个值),并且可以在 SQL 查询中像内置函数一样使用。
2.函数创建的基本语法
使用create function语句创建
CREATE FUNCTION 函数名(参数1 数据类型,参数2 数据类型,...)
RETURN 返回值类型
[DETERMINISTIC] | [SQL DATA ACCESS {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}]
BEGIN
---函数逻辑
RETURN 返回值
END ;
参数说明
- 函数名:必须是唯一的
- DETERMINISTIC:函数是确定性的(即对于相同的输入总是返回相同的结果)
若是非确定性的(如使用了RAND()或NOW())可以使用NOT DETERMINISTIC
- SQL DATA ACCESS:指定函数对数据的访问方式
- CONTATINS SQL:函数包含SQL语句,但不读取或者修改数据
- NO SQL: 函数不包含SQL语句
- READS SQL DATA : 函数读取数据,但不修改数据
- MODIFIES SQL DATA: 函数修改数据
3.创建函数的步骤
步骤1:修改结束符
在创建函数时,MySQL默认使用分号 ; 作为语句的结束符。为了在函数体中正确的使用分号,需要临时的修改结束符
DELIMITER $$
步骤2:编写函数
使用CREATE FUNCTION 语句编写函数逻辑
步骤3:恢复结束符
创建完成后,恢复默认的结束符
DELIMITER ;
4.函数创建的示例
示例1:简单的加减法
创建一个函数,接收两个整数参数并返回他们的和
DELIMITER $$
CREATE FUNCTION AddTwoNumbers(a INT, b INT)
RETURN INT
DETERMINISTIC
BEGIN
RETURN a+b ;
END$$
DELIMITER ;
函数的使用
SELECT AddTwoNunbers(1,5) ----返回6
示例2:计算折扣价格
创建一个函数,接收原价和折扣率,返回折扣后的价格
DELIMITER $$
CREATE FUNCTION CalculateDiscountPrice(Origine DECIMAL(10,2),discount_rate DECIMAL(5,2))
RETURN DECIMAL(10,2)
DETERMINISTIC
BEGIN
DECLARE discount_price DECIMAL(10,2);
SET discount_price = Origine * (1 - discount_rate);
RETURN discount_price;
END$$
DELIMITER ;
函数的调用
SELECT CalculateDiscountPrice(100.00, 0.20);
- 数据类型
DECIMAL(m,n) : 最多m位数,其中n位是小数
DECLARE:声明一个变量
示例3:判断是否为闰年
创建一个函数,判断给定年份是否为闰年
DELIMITER $$
CREATE FUNCTION IsLeapYear(year INT)
RETURN VARCHAR(10)
DELERMINISTIC
BEGIN
IF (year%4=0 AND year%100!=0) OR (year%400=0)
THEN
RETURN '是闰年';
ELSE
RETURN '不是闰年';
END IF;
END$$
DELIMITER ;
函数调用
SELECT IsLeapYear(2004);
5.查看和删除函数
(1)查看函数
查看所有的函数
SHOW FUNCTION STATUS;
查看函数的定义
SHOW CREATE FUNCTION 函数名;
(2)删除函数
使用DROP FUNCTION语句删除函数:
DROP FUNCTION 函数名;
示例:
DROP FUNCTION AddTwoNumbers;