zoukankan      html  css  js  c++  java
  • MySQL学习——操作自定义函数

    MySQL学习——操作自定义函数

    摘要:本文主要学习了使用DDL语句操作自定义函数的方法。

    了解自定义函数

    是什么

    自定义函数是一种与存储过程十分相似的过程式数据库对象。它与存储过程一样,都是由SQL语句和过程式语句组成的代码片段,并且可以被应用程序和其他SQL语句调用。

    自定义函数与存储过程的区别

    自定义函数不能拥有输出参数,这是因为自定义函数自身就是输出参数;而存储过程可以拥有输出参数。

    自定义函数中必须包含一条return语句,而这条特殊的SQL语句不允许包含于存储过程中。

    可以直接对自定义函数进行调用而不需要使用call语句,而对存储过程的调用需要使用call语句。

    创建自定义函数

    语法

    1 create function 函数名([参数])
    2 returns 类型
    3 函数主体

    说明

    1)函数名

    指定自定义函数的名称。注意,自定义函数不能与存储过程具有相同的名称。

    2)参数

    用于指定自定义函数的参数。这里的参数只有名称和类型,不能指定关键字in、out和inout。

    3)类型

    用于声明自定义函数返回值的数据类型。

    4)函数主体

    自定义函数的主体部分,也称函数体。所有在存储过程中使用的SQL语句在自定义函数中同样适用,包括前面所介绍的局部变量、set语句、流程控制语句、游标等。

    除此之外,自定义函数体还必须包含一个 return 返回值 语句,用于指定自定义函数的返回值。在 return 返回值 语句中包含select语句时,select语句的返回结果只能是一行且只能有一列值。

    实例

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

    1 mysql> create function showTopGrade()
    2     -> returns int(10)
    3     -> return (select max(grade) from score);
    4 Query OK, 0 rows affected (0.00 sec)
    5 
    6 mysql> 

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

    1 mysql> create function getStuGrade(stu varchar(45))
    2     -> returns int(10)
    3     -> return (select max(grade) from score where student = stu);
    4 Query OK, 0 rows affected (0.00 sec)
    5 
    6 mysql> 

    使用自定义函数

    语法

    1 select 自定义函数名称([参数]);

    实例

    1 mysql> select showTopGrade();
    2 +----------------+
    3 | showTopGrade() |
    4 +----------------+
    5 |             95 |
    6 +----------------+
    7 1 row in set (0.00 sec)
    8 
    9 mysql> 

    查看自定义函数

    查看所有自定义函数

     1 mysql> mysql> show function status;
     2 +------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
     3 | Db   | Name         | Type     | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
     4 +------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
     5 | demo | getGrade     | FUNCTION | root@localhost | 2019-09-07 18:40:17 | 2019-09-07 18:40:17 | DEFINER       |         | utf8                 | utf8_general_ci      | gb2312_chinese_ci  |
     6 | demo | getStuGrade  | FUNCTION | root@localhost | 2019-09-10 00:25:54 | 2019-09-10 00:25:54 | DEFINER       |         | utf8                 | utf8_general_ci      | gb2312_chinese_ci  |
     7 | demo | showTopGrade | FUNCTION | root@localhost | 2019-09-10 00:19:40 | 2019-09-10 00:19:40 | DEFINER       |         | utf8                 | utf8_general_ci      | gb2312_chinese_ci  |
     8 +------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
     9 3 rows in set (0.00 sec)
    10 
    11 mysql> 

    查看自定义函数的创建语句

    1 mysql> mysql> show create function getGrade;
    2 +----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
    3 | Function | sql_mode                                   | Create Function                                                                                                        | character_set_client | collation_connection | Database Collation |
    4 +----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
    5 | getGrade | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` FUNCTION `getGrade`() RETURNS int(10) return (select grade from score where id = 12) | utf8                 | utf8_general_ci      | gb2312_chinese_ci  |
    6 +----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
    7 1 row in set (0.00 sec)
    8 
    9 mysql> 

    修改自定义函数

    可以通过先删除自定义函数,然后重新创建自定义函数的方法实现修改的操作。

    删除自定义函数

    语法

    1 drop function 自定义函数名称

    实例

    1 mysql> drop function getGrade;
    2 Query OK, 0 rows affected (0.00 sec)
    3 
    4 mysql> 
  • 相关阅读:
    傻傻分不清的__proto__与prototype
    Groovy 学习资料
    ES6箭头函数()=>{} 与function的区别
    032_磁盘格式时不同的分区label的区别
    004windows输入输出重定向
    SpringBoot @Configuration、@Bean注解的使用详解(配置类的实现)
    SpringBoot 自定义错误页2(进阶:简单地自定义Error数据、Error视图)
    SpringBoot Lombok使用详解4(@Data、@Value、@NonNull、@Cleanup)
    SpringBoot Lombok使用详解2(@Setter、@Getter、@ToString、@EqualsAndHashCode)
    SpringBoot 自定义错误页1(基础:配置404等错误的静态页面、动态模版页面)
  • 原文地址:https://www.cnblogs.com/shamao/p/11636091.html
Copyright © 2011-2022 走看看