一、概述
函数 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 函数名
修改和存储过程一样没有实际意义,不赘述了