转自:https://www.2cto.com/database/201804/740205.html

MySQL中已经有很多函数,如时间函数等,但是有时这些函数不能满足自己的设计需求,此时需要自定义函数,用户自定义函数(User-defined functuin,UDF)是对MySQL的扩展,其用法和内置函数相同

函数需要具备:参数 返回值

对于函数体中的部分可以是:

1、函数体由合法的SQL语句组成

2、函数体可以是简单的select或者insert语句

3、函数体若为复合结构则使用begin...end语句

4、复合结构可以包含声明、循环、控制结构

1、无参数

知道通过now()函数可以显示日期和时间,如果想把这个时间表达成:“年月日时分秒” 的形式怎么办呢?通过使用格式化函数DATE_FORMAT()

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

由于该过程书写较为麻烦,如果经常使用很不方便,因此将其“制作”成函数

1
2
mysql> create FUNCTION f1() returns varchar(30)
    -> RETURN DATE_FORMAT(NOW(),'%Y年:%m月:%d日 %H点:%i分:%s秒');

由于在定义f1()的时候没有参数,因此调用时就可以直接调用

1
mysql> select f1();

2、带有参数

带有一个以上的参数时,这里求解两个数的平均数

1
2
3
mysql> create FUNCTION f2(num1 smallint unsigned,num2 smallint unsigned)  #函数名
    -> RETURNS FLOAT(10,2) UNSIGNED       #返回值的类型
    -> RETURN (num1+num2)/2;              #返回值

3、创建具有复合结构的函数

首先创建一个数据表test

1
2
3
root@localhost test>create table test(id tinyint(3) unsigned primary key auto_increment,
    -> username varchar(30) not null
    -> );

现在想往数据表中插入记录,返回值是新插入的记录的id号

1
root@localhost test>insert into test values(default,'Lj.K');

由于分号是命令的结束,因此这里需要修改默认的分隔符,否则在输入分号之后无法返回新插入记录的id,因此使用命令

1
DELIMITER 分隔符

这样所有的命令均需要以分隔符来结束

比这将分隔符修改为//,则所有命令均需要以 // 为结束

1
2
3
4
5
6
7
root@localhost test>create FUNCTION adduser(username varchar(20))  #创建添加参数名为username的函数adduser
    -> RETURNS INT UNSIGNED
    -> BEGIN
    -> INSERT test(username) VALUES(username);
    -> RETURN LAST_INSERT_ID();
    -> END
    -> //

这里因为有两条语句 insert test(username) values(username)和return last_insert_id()两条语句要执行,因此需要使用BEGIN...END语句,从而构成聚合体

1
2
root@localhost test>select  adduser('Rose');
    -> //

1
2
root@localhost test>DELIMITER ;
root@localhost test>select  adduser('Tom');

通过drop function命令进行删除

MySQL之自定义函数实例讲解的更多相关文章

  1. Mysql - 存储过程/自定义函数

    在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...

  2. mysql创建自定义函数与存储过程

    mysql创建自定义函数与存储过程 一 创建自定义函数 在使用mysql的过程中,mysql自带的函数可能不能完成我们的业务需求,这时就需要自定义函数,例如笔者在开发过程中遇到下面这个问题 mysql ...

  3. navicat与phpmyadmin做mysql的自定义函数和事件

    自定义函数和事件是mysql一个很方便的功能,navicat在5.1以上版本就支持了自定义函数和事件,phpmyadmim不清楚. 用这个是由于一些简单的事情,没有必要去做一个服务器计划使用 接下来我 ...

  4. 【MySQL】分页查询实例讲解

    MySQL分页查询实例讲解 1. 前言 本文描述了团队在工作中遇到的一个MySQL分页查询问题,顺带讲解相关知识点,为后来者鉴.本文的重点不是"怎样"优化表结构和SQL语句,而是探 ...

  5. MySQL(六) —— 自定义函数

    自定义函数 用户自定义函数(user-defined function, UDF)是一种对MySQL扩展的途径,其用法与内置函数相同. 参数,返回值 创建自定义函数 CREATE FUNCTION f ...

  6. MySQL之自定义函数

    引言 MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利,比如我前面提到过的聚合函数SUM().AVG()以及日期时间函数等等,可是我们总会出现其他的需求:我们需要 ...

  7. MySQL 创建自定义函数

    语法:Create function function_name(参数列表)returns返回值类型 函数体 函数名,应合法的标识符,不应与系统关键字冲突. 一个函数应该属于某个数据库,可以使用db_ ...

  8. mysql增加自定义函数功能

    mysql默认是不能自定义函数的 当create function时 This function has none of DETERMINISTIC, NO SQL, or READS SQL DAT ...

  9. MySQL 创建自定义函数(1)

    1. 创建测试自定义函数(1) CREATE DEFINER=`dbdh`@`localhost` FUNCTION `test`.`sp_function_dbdh_three`() RETURNS ...

随机推荐

  1. ProgressDialog的样式

    ProgressDialog的样式有两种,一种是圆形不明确状态,一种是水平进度条状态 第一种方式:圆形进度条 final ProgressDialog dialog = new ProgressDia ...

  2. 用 Systemtap 统计 TCP 连接

    转自: https://mp.weixin.qq.com/s?__biz=MzIxMjAzMDA1MQ==&mid=2648946009&idx=1&sn=3a0be2fe4f ...

  3. Linux无人值守安装系统

    yum install dhcp -yvim /etc/dhcp/dhcpd.conf--------------------------------------------- allow booti ...

  4. Laravel5.5 综合使用

    使用 Laravel5.5 开发一个自动交割的项目,把使用到的开源扩展包及特性整理起来,以供后续使用. 一.安装IDE提示工具 Laravel IDE Helper 是一个极其好用的代码提示及补全工具 ...

  5. SVM简单上手示例

    转载自 百度知道 id:风_南(https://zhidao.baidu.com/usercenter?uid=e9904069236f25705e799313) 转载只为方便学习复习,侵删. 在用s ...

  6. 3.1.1 简单的 grep

        grep 最简单的用法就是使用固定字符串:           [many@avention Desktop]$ who         many     :0           2019- ...

  7. 以位为单位存储标志-共用体-union

    一.程序的结构如下: typedef union _KEYST     {         struct         {             uint8 Key1_Flag :1;//表示第0 ...

  8. [luoguP1854] 花店橱窗布置(DP)

    传送门 f[i][j] 表示前 i 盆花,放到前 j 个花盆中的最优解 pre[i][j] 记录前驱 代码 #include <cstdio> #include <cstring&g ...

  9. [luoguP1507] NASA的食物计划(DP)

    传送门 二位费用背包 ——代码 #include <cstdio> #include <iostream> int n, maxv, maxw; ][]; inline int ...

  10. 为 Windows Phone 8.1 app 解决“The type does not support direct content.”的问题

    我在 VS 14 CTP 中新建了一个空的 app store 项目名叫 PlayWithXaml ,项目的 MainPage.xaml 文件改为了以下内容: <Page x:Class=&qu ...