------Chapter7------------------------------------------------
MySQL自定义函数简介
自定义函数:
用户自定义函数(user-defined function,UDF) 是对一种自定义MySQL扩展的途径,其用法与内置函数相同。
两个必要条件:
1:参数、2:返回值
函数可以返回任意类型的值,同样可以接受这些类型的参数
创建自定义函数:
CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL} routine_body(函数体)
函数体由合法的SQL语句构成;
函数体可以是简单的SELECT 或 INSERT语句;
函数体如果为复合结构则使用BEGIN...END语句;
复合结构可以包含声明、循环、控制结构。
MySQL创建不带参数的自定义函数
eg:
mysql> SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点:%i分:%s秒');
+-----------------------------------------------------+
| DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点:%i分:%s秒') |
+-----------------------------------------------------+
| 2017年09月25日 19点:39分:56秒 |
+-----------------------------------------------------+
1 row in set (0.00 sec)
mysql> CREATE FUNCTION f1() RETURNS VARCHAR(30)
-> RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点:%i分:%s秒');
Query OK, 0 rows affected (0.15 sec)
mysql> SELECT f1();
+----------------------------------+
| f1() |
+----------------------------------+
| 2017年09月25日 19点:41分:42秒 |
+----------------------------------+
1 row in set (0.03 sec)
MySQL创建带有参数的自定义函数
eg:
mysql> CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
-> RETURNS FLOAT(10,2) UNSIGNED
-> RETURN (num1+num2)/2;
Query OK, 0 rows affected (0.20 sec)
mysql> SELECT f2(10,4);
+----------+
| f2(10,4) |
+----------+
| 7.00 |
+----------+
1 row in set (0.04 sec)
mysql> SELECT f2(10.5,4);
+------------+
| f2(10.5,4) |
+------------+
| 7.50 |
+------------+
1 row in set (0.07 sec)
MySQL创建具有复合结构函数体的自定义函数
eg:
mysql> DELIMITER // (更改结束标识符为;)
mysql> CREATE FUNCTION adduser(username VARCHAR(20))
-> RETURNS INT UNSIGNED
-> BEGIN
-> INSERT test(username) VALUES(username);
-> RETURN LAST_INSERT_ID();
-> END
-> //
Query OK, 0 rows affected (0.03 sec)
mysql> SELECT adduser('ROSE');
-> //
+-----------------+
| adduser('ROSE') |
+-----------------+
| 4 |
+-----------------+
1 row in set (0.14 sec)
mysql> DELIMITER ; (更改结束标识符为;)
mysql> SELECT adduser('TOM');
+----------------+
| adduser('TOM') |
+----------------+
| 5 |
+----------------+
1 row in set (0.36 sec)
mysql> SELECT * FROM test;(证明插入成功,函数调用成功)
+----+----------+
| id | username |
+----+----------+
| 1 | john |
| 2 | 111 |
| 3 | TOM |
| 4 | ROSE |
| 5 | TOM |
+----+----------+
5 rows in set (0.00 sec)
删除函数:
DROP FUNCTION [IF EXISTS] function_name