MySQL学习20:运算符与函数之自定义函数

        一自定义函数简介

        (1)自定义函数定义

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

        (2)自定义函数的两个必要条件

        1)参数:可以有零个或多个。

        2)返回值:只能有一个返回值。

       使用自定义函数的注意事项

       1)所有函数都有返回值,但不一定都有参数。

       2)函数的参数与返回值之间没有必然的内在联系。

       3)函数可以返回任意类型的值,同样可以接收这些类型的参数。

       (3)创建自定义函数

       创建自定义函数的语法结构:

       CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL} routine_body;

       (4)函数体

       1)函数体由合法的SQL语句构成。

       2)函数体可以是简单的SELECT或INSERT语句。

       3)函数体如果为复合结构则使用BRGIN...END语句。

       4)复合结构可以包含声明,循环,控制结构。

       二创建不带参数的自定义函数

       实例:

       查看当前日期时间和格式化当前时间

       SELECT NOW();

       SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点:%i分:%s秒');


       对于习惯使用日期时间的来说,我们并不习惯上面的第一个,第二个格式化后的时间我们比较认同。每次都去格

式化日期时间会比较麻烦,因此我们考虑把这个过程自定义为一个函数。

       将上面的过程封装为一个函数

       CREATE FUNCTION f1() RETURNS VARCHAR(30) RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H

点:%i分:%s秒');

       调用函数

       SELECT f1();


       三创建带有参数的自定义函数

       自定义一个求两个数的平均数的函数,要求结果保留两位小数。

       CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED) RETURNS  FLOAT(10,2)

 UNSIGNED RETURN (num1+num2)/2;

       调用函数

       SELECT f2(10,15);


       四创建具有复合结构函数体的自定义函数

       自定义一个返回最后插入数据表的记录并且返回最后一个插入的ID号的函数

       USE t1;

       SELECT * FROM test;

       CREATE FUNCTION adduser(username VARCHAR(20)) RETURNS  INT  UNSIGNED BEGIN INSERT 

test(username) VALUES(username); RETURN LAST_INSERT_ID(); END;


       上面报错的原因是MySQL语句结束符号报错,我们平常一般的MySQL语句都是以;结束,但是复合结构中包括插

入语句,查询语句等子SQL语句,而每个语句都会以;结束,因此MySQL数据库的客户端只会识别第一个;号,后面的

内容不再读取,因此造成语句出错。

       我们做出以下修改:

       修改语句的结束符号

        DELIMITER //

        创建自定义函数

        CREATE FUNCTION adduser(username VARCHAR(20)) RETURNS  INT  UNSIGNED BEGIN INSERT 

test(username) VALUES(username); RETURN LAST_INSERT_ID(); END//

        DELIMITER ;

        调用函数

        SELECT adduser('Lee');

        SELECT * FROM test;


        五自定义函数的查找

        自定义函数的查找

        SHOW FUNCTION STATUS\G;


        删除函数

        删除函数的语法结构:

        DROP FUNCTION [IF EXISTS] function_name;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值