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

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

了解自定义函数

是什么

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

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

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

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

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

创建自定义函数

语法

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

说明

1)函数名

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

2)参数

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

3)类型

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

4)函数主体

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

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

实例

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

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

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

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

使用自定义函数

语法

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

实例

 mysql> select showTopGrade();
+----------------+
| showTopGrade() |
+----------------+
| 95 |
+----------------+
1 row in set (0.00 sec) mysql>

查看自定义函数

查看所有自定义函数

 mysql> mysql> show function status;
+------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| 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 |
| 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 |
| 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 |
+------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
3 rows in set (0.00 sec) mysql>

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

 mysql> mysql> show create function getGrade;
+----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| Function | sql_mode | Create Function | character_set_client | collation_connection | Database Collation |
+----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| 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 |
+----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec) mysql>

修改自定义函数

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

删除自定义函数

语法

 drop function 自定义函数名称

实例

 mysql> drop function getGrade;
Query OK, 0 rows affected (0.00 sec) mysql>

MySQL学习——操作自定义函数的更多相关文章

  1. MySQL学习——操作存储过程

    MySQL学习——操作存储过程 摘要:本文主要学习了使用DDL语句操作存储过程的方法. 了解存储过程 是什么 存储过程是一组为了完成特定功能的SQL语句集合. 使用存储过程的目的是将常用或复杂的工作预 ...

  2. MySQL学习——操作视图

    MySQL学习——操作视图 摘要:本文主要学习了使用DDL语句操作视图的方法. 了解视图 是什么 视图是从一个.多个表或者视图中导出的表,包含一系列带有名称的数据列和若干条数据行. 特点 视图不是数据 ...

  3. MySQL学习——操作表里的数据

    MySQL学习——操作表里的数据 摘要:本文主要学习了使用DML语句操作表里数据的方法. 插入数据 语法 通过传入数据插入: insert into 表名 [(列名1, …, 列名n)] values ...

  4. MySQL学习——操作数据库

    MySQL学习——操作数据库 摘要:本文主要学习了使用DDL语句操作数据库的方法. 创建数据库 语法 create database [if not exists] 数据库名 [default] ch ...

  5. MySQL学习(六)——自定义连接池

    1.连接池概念 用池来管理Connection,这样可以重复使用Connection.有了池,我们就不用自己来创建Connection,而是通过池来获取Connection对象.当使用完Connect ...

  6. MySql学习笔记——存储函数

    在学习完存储过程后,今天主要回顾一下mysql中的存储函数的知识. 函数与存储过程的区别 首先,存储函数也是过程式对象之一,与存储过程相似.它们都是由SQL和过程式语句组成的代码片断,并且可以从应用程 ...

  7. MySQL存储过程和自定义函数、Navicat for mysql、创建存储过程和函数、调用存储过程和函数的区别

    1 MySQL存储过程和函数 过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent Stored Module,PSM),可以反复调用,运行速度快. 1.1 存储过程 存储 ...

  8. python学习之--自定义函数:

    Python之--自定义函数: 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 以下自定义 ...

  9. mysql中的自定义函数

    创建不带参数的自定义函数: 使用: 创建带参数的自定义函数: 使用: 创建具有复合结构的函数体的自定义函数:

随机推荐

  1. pip安装插件报错。

    报错: Cannot unpack file C:\Windows\TEMP\pip-unpack-4mbfczpj\simple (downloaded from C:\Windows\TEMP\p ...

  2. C/C++ 中 `printf` 格式化

    作为强类型静态语言,类型不仅规定了可以对数据进行的操作,还决定了应该怎样在 printf 中输出. printf 的签名是: int printf ( const char * format, ... ...

  3. Javascript 的定时器 setInterval,setTimeout,clearInterval

    今天开通博客.来1个.哇哈哈哈~~ 今天本来想复习BOM的看到定时器也算DOM一种 ?(是这样吗).分享一下 参考源于:八神吻你 http://www.cnblogs.com/lmfeng/archi ...

  4. flex下省略号的问题解决

    最近在搞微信小程序,发现flex下使用省略号是没有效果的,而且还会打乱预期的结构,查询statckoverflow知道需要在父级设置min-width:0; 但是在我的尝试下,依然不行,原来在上层父级 ...

  5. 代码提示—ArcGIS API forJavaScript for JavaScript 编辑器代码提示(支持3.x和4.x)

    我一般用WebStorm来arcgis api for js的代码,因为api中的内容太多,每次写代码都要去官方API网站查询,很不方便,所以决定配置一个代码补全,方便写接口. 通过ArcGIS AP ...

  6. Good start is a half success(2019-04-07)

    一. 回顾你过去将近3年的学习经历. (1)当初你报考的时候,是真正喜欢计算机这个专业吗?. (2)你现在后悔选择了这个专业吗?. (3)你认为你现在最喜欢的领域是什么(可以是计算机的也可以是其它领域 ...

  7. Thread <number> cannot allocate new log, sequence <number>浅析

    有时候,你会在ORACLE数据库的告警日志中发现"Thread <number> cannot allocate new log, sequence <number> ...

  8. MyBtis之关于#{}和${}

    1.${}的用法的mapper文件配置: </select>     <select id="selById2" resultType="com.sus ...

  9. Best Cow Line <挑战程序设计竞赛> 习题 poj 3617

    P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Goldpoj 3617 http://poj.org/problem?id=3617 题目描述FJ is about ...

  10. 2019-2020-1 20199305《Linux内核原理与分析》第五周作业

    系统调用的三层机制(上) (一)用户态.内核态和中断 (1)Intel x86 CPU有4种不同的执行级别 分别是0.1.2.3,数字越小,特权越高.Linux操作系统中只是采用了其中的0和3两个特权 ...