Mysql 复习笔记- 基础篇12 [函数定义概述]

MySQL不仅内置了一些常用函数,同时也支持自定义函数,来满足开发者的需求

函数定义

MySQL的函数定义语法如下:

    CREATE  
        [DEFINER = { user | CURRENT_USER }]
        FUNCTION functionName ( varName varType [, ... ] )
        RETURNS returnVarType
        [characteristic ...] 
        routine_body
  • functionName:函数名,同MySQL内置函数一样,大小写不敏感
  • varName: 形参名
  • varType: 形参类型,其与varName配对使用。形参数量不限( ≥ 0 \geq 0 0)
  • returnVarType: 返回值类型。函数必须有且只能有一个返回值
  • characteristic:函数特性,下将详述
  • routine_body:函数体。函数体中必须含有 return 语句,当函数体为复合结构时,需要使用begin … end 语句

characteristic的可用参数值如下:

| 值 | 说明 | | :-: | :-: | | language sql | 指明函数体的语言类型, 目前仅支持sql | | [not] deterministic | deterministic 指明函数的结果是确定的,即相同的输入会得到相同的输出;not deterministic意为结果不确定。默认为 not deterministic | | { contains sql | no sql | reads sql data | modifies sql data } | 指明函数体使用sql语句的限制。contains sql意为函数体包含sql语句,但不包含读写数据的sql语句;no sql意为函数体不包含sql语句;reads sql data意为函数体包含读数据sql语句;modifies sql data意为函数体包含写数据的sql语句。默认为contains sql | | sql security { definer | invoker } | 指明谁有权限执行该函数。definer意为只有定义者才能执行;invoker意为拥有权限的调用者可以执行。默认为definer | | comment ‘message’ | 函数的注释信息,指明函数的功能 |

示例如下:

  • 函数体为简单结构:
    create    
        function myfun_getAvg(num1 int, num2 int)    
        comment '计算两个数的均值'
        returns int    
        return (num1+num2)/2;
  • 函数体为复合结构:
    create
        function myfun_getMax(num1 int, num2 int)
        returns int        
    begin
        declare res int;
        if(num1 > num2) then
            set res = num1;
        elseif (num1 < num2) then
            set res = num2;
        else
            set res = num1;
        end if;
        return res;
    end;

变量

局部变量

定义在sql语句块中的变量,常见于存储过程和函数的 begin … end 中,语句块执行完后局部变量则结束生命周期

声明定义

函数中可以通过 declare 声明定义局部变量,其作用域为 begin … end 的函数体中。默认初值为nul,可以通过default指定该语句中所有定义变量的初值

declare var [, .

你可能感兴趣的:(mysql,mysql,数据库,database)