一、概述
函数 Function,存储过程的用途一致,减少程序逻辑,和数据库服务的连接次数,提高效率
简化操作,提高SQL重用性
函数 和 存储过程的区别?
存储过程允许多个返回的数据,函数只允许一个返回数据
适用场景:
存储过程适合、批量插入、更新
函数适合处理数据后返回一个结果
二、语法 Syntax
创建函数
CREATE FUNCTION 函数名称(参数列表)RETURNS 返回类型
BEGIN
函数体
END
参数写法:
参数名 参数类型
语法注意
1、函数体必须要写上return语句
2、如果只有一条函数语句可以省略BEGIN & END
3、使用 DELIMITER 语句作为设置结束标记语句
调用语法
SELECT 函数名称(参数列表)
三、样例演示
1、无参数有返回
查询全部员工人数
DELIMITER $
CREATE FUNCTION employeeCount() RETURNS INT
BEGIN
DECLARE c INT DEFAULT 0;
SELECT
COUNT(*)
INTO
c
FROM
employees;
RETURN c;
END$
调用:
# SELECT employeeCount();
SELECT employeeCount() AS '员工人数';
2、有参数有返回
根据员工名返回工资:
DELIMITER $
CREATE FUNCTION querySalaryByEmployeeName
(
employeeName VARCHAR(20)
)
RETURNS DOUBLE
BEGIN
# DECLARE salary DOUBLE DEFAULT 0;
SET @salary = 0;
SELECT
salary
INTO
@salary
FROM
employees
WHERE
employees.`last_name` = employeeName;
RETURN @salary;
END $
调用
SELECT querySalaryByEmployeeName('Kochhar') AS '工资';
根据部门名返回该部门平均工资:
DELIMITER $
CREATE FUNCTION queryAvgSalaryByDepartmentName
(
departmentName VARCHAR(20)
)
RETURNS DOUBLE
BEGIN
DECLARE avgSalary DOUBLE DEFAULT 0;
SELECT
AVG(e.salary)
INTO
avgSalary
FROM
employees e JOIN departments d ON e.department_id
WHERE
d.department_name = departmentName;
RETURN avgSalary;
END $
调用函数:
SELECT queryAvgSalaryByDepartmentName('IT') AS '平均工资';
四、函数的查看与删除
查看函数的语法:
SHOW CREATE FUNCTION 函数名称;
或者是直接找到系统进行查看:
mysql库 -> proc表
删除函数的语法:
DROP FUNCTION 函数名
修改和存储过程一样没有实际意义,不赘述了