函数介绍
函数和存储过程差不多,都可以提高代码的重用性,简化操作。
它们之间的区别:
存储过程:可以有任意个返回值,适合做批量的插入和更新。
函数:有且仅有1个返回值,适合数据处理,并返回处理结果。
函数语法
创建语法:
CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
函数体
[return 值;]
END
函数一般都会有return语句,但如果没有也可以
函数体中如果只有一句代码则可以省略begin end
使用delimiter设置结束标记
调用语法
SELECT 函数名(参数列表)
使用演示
返回student_info表的统计个数
mysql> DELIMITER $
mysql> CREATE FUNCTION fun0() RETURNS INT
-> BEGIN
-> DECLARE res INT DEFAULT 0;
-> SELECT COUNT(*) INTO res FROM student_info;
-> RETURN res;
-> END $
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT fun0()$
+--------+
| fun0() |
+--------+
| 7 |
+--------+
1 row in set (0.01 sec)
根据学生姓名返回学生的班级号
mysql> DELIMITER $
mysql> CREATE FUNCTION fun2(stuName varchar(32)) RETURNS VARCHAR(32)
-> BEGIN
-> SET @classCode = '';
-> SELECT class INTO @classCode
-> FROM student_info
-> where s_name = stuName;
-> return @classCode;
-> END $
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT fun2('小喵')$
+----------------+
| fun2('小喵') |
+----------------+
| 001 |
+----------------+
1 row in set (0.00 sec)
求和
mysql> CREATE FUNCTION fun3(a FLOAT,b FLOAT) RETURNS FLOAT
-> BEGIN
-> DECLARE c FLOAT DEFAULT 0.0;
-> SET c = a+b;
-> return c;
-> END $
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT fun3(1.2,0.4)$
+-------------------+
| fun3(1.2,0.4) |
+-------------------+
| 1.600000023841858 |
+-------------------+
查看函数
语法:SHOW CREATE FUNCTION 函数名;
SHOW CREATE FUNCTION fun1$
删除函数
语法:DROP FUNCTION 函数名;
mysql> DROP FUNCTION fun1$
Query OK, 0 rows affected (0.00 sec)