一、函数
在数据库中都有函数,这些函数属于系统函。除此之外用户也可以编写用户自定义函数。用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序。调用时如同系统函数一样,如max(value)函数,其value被称为参数。函数一般功能比较简单,对于mysql函数只有传入参数,不像存储过程一样,有输入输出参数。
数据库函数特点如下:
- 存储函数将向调用者返回一个且仅返回一个结果值。
- 存储函数嵌入在sql中使用的,可以在select中调用,就像内建函数一样,比如cos()、hex()。
- 存储函数的参数类型类似于IN参数。
二、自定义函数
自定义函数简单语法:
CREATE FUNCTION 函数名称(
变量名称 类型,
变量名称 类型
)
RETURN 类型
BEGIN
-- 声明, 语句要完成的操作,
RETURN 变量;
END;
三、实例
例子中的函数使用mysql作为例子。 表结构如下:
DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
1、不带参数的函数
DROP FUNCTION IF EXISTS get_count; -- 定义函数 CREATE FUNCTION get_count() RETURNS INT -- 返回值类型 BEGIN RETURN (SELECT COUNT(*) FROM person); END; -- 调用 SELECT get_count() AS ‘total‘;
表示获取person表的所有记录,没有参数,有数值返回值。
2、带有参数的函数
DROP FUNCTION IF EXISTS get_age; CREATE FUNCTION get_age( id INT(11) -- 参数(参数可以多个) ) RETURNS INT(11) -- 返回值类型(只能有一个返回值) BEGIN DECLARE age INT; -- 定义变量 SET age = (SELECT p.age FROM person p where p.id = id); IF(ISNULL(age)) THEN -- 查询到的年龄不存在(如id错误,没有记录存在) RETURN 0; ELSE RETURN age; END IF; END; -- 函数调用 SELECT get_age(2) as ‘age‘;
表示通过id获取年龄,有id参数,有数值返回值。
3、函数其他命令
SELECT get_age(2); -- 函数的调用 SHOW FUNCTION STATUS; -- 查看所有函数 SHOW CREATE FUNCTION get_age; -- 查看具体函数 DROP FUNCTION get_age; -- 删除查看具体函数
函数的功能一般都是比较简单的,如求某个值,格式转换等。不像存储过程,一般逻辑都比较复杂。