MySQL数据库——三种'自定义函数'的概念与定义

自定义函数:
用户自定义函数(user-defined-function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同

--创建自定义函数格式:
CREATE FUNCTION function_name RETURNS {STRING | INTERGER | REAL | DECIMAL} routine_body

--删除函数:
DROP FUNCTION [IF EXISTS] function_name;

--关于函数体
--函数体由合法的SQL语句构成;
--函数体可以是简单的SELECT或INSERT语句;
--函数体如果为复合结构则使用BEGIN..END语句;
--复合结构可以包含声明,循环,控制结构;

注意!
下面示例中会出现,returnreturns
区别是,returns子句指定该函数返回值的数据类型
return用于返回具体的值/值变量

1.不带参数的自定义函数

--示例(自定义格式输出时间):
CREATE FUNCTION f1() RETURNS VARCHAR(30)
RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点:%i分:%s秒');

--调用时可以直接调用,但记得后面加上()小括号

2.带参数的自定义函数

--示例(取平均数,2个参数):
CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
RETURNS FLOAT(10,2) UNSIGNED
RETURN (num1+num2)/2;

--注意,带参数的函数调用时,也要带上参数

3.具有复合结构函数体的自定义函数

--示例(添加表中的元素,假设前提条件已满足):
CREATE FUNCTION addName(name VARCHAR(20))
RETURNS INT UNSIGNED
BEGIN
INSERT Stu(name) VALUES(name);  --回车,系统将以为代码结束
RETURN LAST_INSERT_ID();
END;

--返回的值为,是最后一个插入元素的自动编号LAST_INSERT_ID()

/*
这里要注意!BEGIN与END中间的语句,是分号';'结束,在加上回车换行,系统会默认为语句完结,然后出错。
所以,一般为了美观(还是会换行),且不被分号';'影响,一般会使用 DELIMITER 修改定界符
*/
DELEMITER //
--意为,使用'//'来代替';'完结,此时,在函数里使用分号';',就不会被系统错误的以为是语句完结而退出了
DELEMITER ;
--即为换回分号';'

你可能感兴趣的:(MySQL)