第三课 函数

  • 存储过程和函数:一组预先编译好的SQL语句的集合,理解成批处理语句,类似于Java中的方法
  • 好处
    • 提高代码的重用性
    • 简化操作
    • 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

1 函数与存储过程的区别

  • 存储过程:可以有0个返回,也可以有多个返回,适合做批量插入或批量更新
  • 函数:有且仅有一个返回,适合做处理数据后返回一个值

2 函数创建语法

CREATE FUNCTION 函数名(参数名 参数列表,...)RETURNS 返回类型
BEGIN
	函数体
END

注意:
1. 函数体必须有RETURN语句,且应该放在函数体最后,放在其他部位也不会保存,但是不建议且没有意义
2. 函数体只有一个语句时,BEGINEND可以省略

3 函数调用语法

SELECT 函数名(参数列表)

4 函数的应用

# 1 无参有返回
# (1) 返回工资的员工数
CREATE FUNCTION myf1() RETURNS INT
BEGIN
	DECLARE num INT DEFAULT 0;
	SELECT COUNT(*) INTO num FROM employees;
	RETURN num;
END;

# 调用函数
SELECT myf1();

# 2 有参有返回
# (2) 根据员工名返回他的工资
CREATE FUNCTION myf2(`name` VARCHAR(20)) RETURNS DOUBLE
BEGIN
	DECLARE salary DOUBLE DEFAULT 0;
	SELECT emp.salary INTO salary FROM employees emp WHERE emp.last_name = `name`;
	RETURN salary;
END;

# 调用函数
SELECT myf2('Abel');

# (3)根据部门名,返回该部门的平均工资
CREATE FUNCTION myf3(dep_name VARCHAR(20)) RETURNS DOUBLE
BEGIN
	DECLARE avgSalary DOUBLE DEFAULT 0;
	SELECT AVG(emp.salary) INTO avgSalary
	FROM employees emp 
	INNER JOIN departments dep 
	ON emp.department_id = dep.department_id 
	WHERE dep.department_name = dep_name 
	GROUP BY emp.department_id;
	RETURN avgSalary;
END;

SELECT myf3('IT');

5 函数的查看与删除

  • 查看
    SHOW CREATE FUNCTION 函数名;
  • 删除
    DROP FUNCTION 函数名;

所有创建的存储过程和函数都记录在MySQL库中的proc表中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值