MySQL学习——操作自定义函数
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学习——操作自定义函数的更多相关文章
- MySQL学习——操作存储过程
MySQL学习——操作存储过程 摘要:本文主要学习了使用DDL语句操作存储过程的方法. 了解存储过程 是什么 存储过程是一组为了完成特定功能的SQL语句集合. 使用存储过程的目的是将常用或复杂的工作预 ...
- MySQL学习——操作视图
MySQL学习——操作视图 摘要:本文主要学习了使用DDL语句操作视图的方法. 了解视图 是什么 视图是从一个.多个表或者视图中导出的表,包含一系列带有名称的数据列和若干条数据行. 特点 视图不是数据 ...
- MySQL学习——操作表里的数据
MySQL学习——操作表里的数据 摘要:本文主要学习了使用DML语句操作表里数据的方法. 插入数据 语法 通过传入数据插入: insert into 表名 [(列名1, …, 列名n)] values ...
- MySQL学习——操作数据库
MySQL学习——操作数据库 摘要:本文主要学习了使用DDL语句操作数据库的方法. 创建数据库 语法 create database [if not exists] 数据库名 [default] ch ...
- MySQL学习(六)——自定义连接池
1.连接池概念 用池来管理Connection,这样可以重复使用Connection.有了池,我们就不用自己来创建Connection,而是通过池来获取Connection对象.当使用完Connect ...
- MySql学习笔记——存储函数
在学习完存储过程后,今天主要回顾一下mysql中的存储函数的知识. 函数与存储过程的区别 首先,存储函数也是过程式对象之一,与存储过程相似.它们都是由SQL和过程式语句组成的代码片断,并且可以从应用程 ...
- MySQL存储过程和自定义函数、Navicat for mysql、创建存储过程和函数、调用存储过程和函数的区别
1 MySQL存储过程和函数 过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent Stored Module,PSM),可以反复调用,运行速度快. 1.1 存储过程 存储 ...
- python学习之--自定义函数:
Python之--自定义函数: 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 以下自定义 ...
- mysql中的自定义函数
创建不带参数的自定义函数: 使用: 创建带参数的自定义函数: 使用: 创建具有复合结构的函数体的自定义函数:
随机推荐
- Centos6进入单用户模式的两种方法
单用户模式的作用 在使用Linux系统中,维护人员经常会碰到一个问题,就是在拥有root账号权限和密码的用户中,总是会出现忘记root密码的情况.遇到这种情况,一般情况下,维护人员就会通过最常用的方法 ...
- flutter_inner_drawer 使用
版本: flutter_inner_drawer: "^0.2.2" github: https://github.com/Dn-a/flutter_inner_drawer 这 ...
- JavaScript动态加载script方式引用百度地图API 拓展---JavaScript的Promise
上一篇博客JavaScript动态加载script方式引用百度地图API,Uncaught ReferenceError: BMap is not defined 这篇文章中我接触到一个新的单词:Pr ...
- 简单的LNMP安全加固
安全加固 Nginx安全加固: Nginx配置文件 (nginx.conf):/usr/local/nginx/nginx.conf 禁用autoindex: autoindex:是Nginx的目录浏 ...
- Dynamics CRM邮件附件,你真的了解吗?
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复160或者20151014可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 听人问起怎么读取到一封邮件所有的 ...
- Gradle之FTP文件下载
Gradle之FTP文件下载 1.背景 项目上需要使用本地web,所以我们直接将web直接放入assets资源文件夹下.但是随着开发进行web包越来越大:所以我们想着从版本库里面去掉web将其忽略掉, ...
- 电池的QPNP模式
名词解释: CV:Constant Voltage恒压 SMMB charger:Switch-ModeBattery Charger and Boost peripheral开关模式电池充电器和升压 ...
- 关于Linux下进程的详解【进程查看与管理】
一.关于进程 进程: 已经启动的可执行程序的运行实力 进程的组成:一个进程包含内核中的一部分地址空间和一系列数据结构.其中地址空间是内核标记的一部分内存以供进程使用,而数据结构则用来纪录每个进程的具体 ...
- 团队项目-Alpha版本发布2
这个作业属于哪个课程 课程的链接 这个作业的要求在哪里 作业要求的链接 团队名称 西柚三剑客 这个作业的目标 -Alpha2版本发布说明,给出测试报告,并进行总结 1. 团队成员的学号列表 团队成员 ...
- acWing 825. 排队购物
题目描述苏西小朋友和她的妈妈正在超市里购物,看着收银处排着的长长的队伍,她就想如何能够提高整体的服务质量呢? 已知,现在有n个人正在排队等待结账,每个人结账所花的时间都可能是不同的,第 i 个人的结账 ...