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> 
  • 相关阅读:
    HDU 4611 Balls Rearrangement 数学
    Educational Codeforces Round 11 D. Number of Parallelograms 暴力
    Knockout.Js官网学习(简介)
    Entity Framework 关系约束配置
    Entity Framework Fluent API
    Entity Framework DataAnnotations
    Entity Framework 系统约定配置
    Entity Framework 自动生成CodeFirst代码
    Entity Framework CodeFirst数据迁移
    Entity Framework CodeFirst尝试
  • 原文地址:https://www.cnblogs.com/shamao/p/11636091.html
Copyright © 2011-2022 走看看