自定义函数
用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同。
函数可以返回任意类型的值,同样可以接收任意类型的值。接收和返回两者没有必然关系。2个必要条件
1.参数 :可以有0个或多个
2.返回值:只能有一个返回值创建自定义函数
CREATE FUNCTION 函数名(参数名1 类型1,参数名2 类型2,…)
RETURNS 返回类型
{STRING|INTEGER|REAL|DECIMAL}
RETURN 函数体
注意:函数必须有返回值,如果无返回值的,应该创建‘存储过程’(函数返回值只能有一个,存储过程可以没有或多个(通过SELECT),而且存储过程可以通过out为变量赋值,而函数不行)
另外,函数的参数最好不要和表的字段名字相同,一定要区分开。关于函数体
1.函数体由合法的SQL语句构成
2.函数体可以是简单的SELECT或INSERT语句(允许用SELECT…INTO 变量来把值写入,但不允许SELECT…来返回结果集,因为函数只允许有一个返回值(切记,SELECT会返回结果集,并不是只有RETURN才可以返回))
3.函数体如果为复合结构则使用BEGIN…END语句
4.复合结构可以包含声明、循环、控制结构- 删除函数
直接使用DROP FUNCTION 函数名。 - 创建不带参数的自定义函数
返回当前时间为年月日时分秒
CREATE FUNCTION f1()
RETURNS VARCHAR(50)
RETURN DATE_FORMAT(NOW(),’%Y年%m月%d日 %H时%i分%s秒’);
调用:SELECT f1();
- 创建带有参数的自定义函数
计算(num1+num2)*2
CREATE FUNCTION f2(num1 INT UNSIGNED,num2 INT UNSIGNED)
RETURNS FLOAT(10,2) UNSIGNED
RETURN (num1+num2)*2;
调用:SELECT f2(2,2); 结果:8
- 创建具有符合结构函数体的自定义函数
表user
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
username VARCHAR(20) NOT NULL
向表user中添加username返回id
(因为用‘;’会认为是sql的结束语句,所以我们可以自定义一下结束符号,
比如:DELIMITER //)
CREATE FUCTION adduser(name VARCHAR(20))
RETURNS INT UNSIGNED
BEGIN
INSERT user(username) VALUES(name);
RETURN LAST_INSERT_ID();
END
//
调用:SELECT adduser(‘jan’);