MySQL学习20:运算符与函数之自定义函数
2016-06-05 22:23
393 查看
一自定义函数简介
(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;
相关文章推荐
- mysql 主从复制配置详解
- MySQL数据库十大优化技巧
- MySQL备份innodbackupex使用
- mysql 主从复制配置详解
- Mysql逻辑模块组成
- MySQL SQL语句优化的10条建议
- MySQL 主从同步容易出现的问题
- mysql show profiles使用分析sql性能
- MySQL索引的创建原则
- Mac下安装MySQL
- mysql索引总结----mysql 索引类型以及创建
- MySQL学习19:运算符与函数之信息函数、聚合函数、加密函数
- mysql数据库常用数据类型
- mysql数据库相关基本术语和概念
- MySQL在wamp中乱码的问题
- mysql获取按日期排序获取最新的记录
- Mysql读写分离,同步复制的探索实现
- 13、MySQL数据库主从不同步解决方案
- MySQL MHA配置常见问题
- 互换数据表中两列数据方法