MySQL之存储函数详细介绍

目录
  • 1、创建存储函数
  • 2 、调用存储函数
  • 3、删除存储函数
  • 4、查看存储过程
  • 5、修改存储函数
  • 6、对比存储函数和存储过程
  • 7、练习题加强

1、创建存储函数

语法格式:

CREATE FUNCTION 函数名(参数名 参数类型,...)
RETURNS 返回值类型
BEGIN
	函数体   #函数体中肯定有 RETURN 语句
END

说明:

参数列表:

FUNCTION中总是默认为IN参数

RETURNS 后的语句表示函数返回数据的类型;

RETURNS子句只能对FUNCTION做指定,对函数而言这是强制的。它用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句。

函数体也可以用BEGIN…END来表示SQL代码的开始和结束。

如果函数体只有一条语句,也可以省略BEGIN…END

2 、调用存储函数

在MySQL中,存储函数的使用方法与MySQL内部函数的使用方法是一样的。换言之,用户自己定义的存储函数与MySQL内部函数是一个性质的。区别在于,存储函数是用户自己定义的,而内部函数是MySQL的开发者定义的。

SELECT 函数名(实参列表)

3、删除存储函数

语法结构:

DROP FUNCTION [IF EXISTS] 存储函数名

4、查看存储过程

1. 使用SHOW CREATE语句查看存储过程和函数的创建信息

语法结构:

SHOW CREATE FUNCTION 存储函数名

2. 使用SHOW STATUS语句查看存储函数的状态信息

语法结构:

SHOW FUNCTION STATUS [LIKE 'pattern']

这个语句返回子程序的特征,如数据库、名字、类型、创建者及创建和修改日期。

[LIKE 'pattern']匹配存储函数的名称,可以省略。当省略不写时,会列出MySQL数据库中存在的所有存储函数的信息。

举例:

#查询名称以select开头的存储函数
mysql> SHOW FUNCTION STATUS LIKE 'SELECT%';
*************************** 1. row ***************************
                  Db: test_db
                Name: SelectAllData
                Type: FUNCTION
             Definer: root@localhost
            Modified: 2021-10-16 15:55:07
             Created: 2021-10-16 15:55:07
       Security_type: DEFINER
             Comment:
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8mb4_general_ci

3. 从information_schema.Routines表中查看存储函数的信息

MySQL中存储函数的信息存储在information_schema数据库下的Routines表中。可以通过查询该表的记录来查询存储函数的信息。

语法结构:

SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='存储函数名' [AND ROUTINE_TYPE = 'FUNCTION '];

说明: 如果在MySQL数据库中存在存储过程和函数名称相同的情况,最好指定ROUTINE_TYPE查询条件来指明查询的是存储过程还是函数。

5、修改存储函数

修改存储函数,不影响存储函数功能,只是修改相关特性。使用ALTER语句实现。

ALTER FUNCTION 存储函数名;

6、对比存储函数和存储过程

关键字 调用语法 返回值 应用场景
存储过程 PROCEDURE CALL 存储过程() 理解为有0个或多个 一般用于更新
存储函数 FUNCTION SELECT 函数() 只能是一个 一般用于查询结果为一个值并返回时

此外,存储函数可以放在查询语句中使用,存储过程不行。反之,存储过程的功能更加强大,包括能够执行对表的操作(比如创建表,删除表等)和事务操作,这些功能是存储函数不具备的。

7、练习题加强

#前提准备
CREATE TABLE employees
AS
SELECT * FROM atguigudb.`employees`; 

CREATE TABLE
departments AS
SELECT * FROM atguigudb.`departments`;
#1. 创建函数get_count(),返回公司的员工个数 #有参有返回
SET GLOBAL log_bin_trust_function_creators = 1;

DELIMITER $
CREATE FUNCTION get_count()
RETURNS INT
BEGIN
	RETURN (SELECT COUNT(*) FROM employees);
END $
DELIMITER ;

注意:

自己在创建存储函数中报错“you might want to use the less safe log_bin_trust_function_creators variable”,然后查看笔记发现解决此问题的一种方式就是执行SET GLOBAL log_bin_trust_function_creators = 1;SQL语句

#2. 创建函数ename_salary(),根据员工id,返回它的工资
#查询表结构来看要返回数据的类型
DESC employees;

DELIMITER $
CREATE FUNCTION ename_salary(id INT)
RETURNS DOUBLE(8,2)
BEGIN
	RETURN (SELECT salary FROM employees WHERE employee_id = id);
END $
DELIMITER ;

#查询结果
SELECT ename_salary(100);

爱在结尾:自己应该学会:1、会使用创建存储函数的基本语法 ; 2、学会调用存储函数; 3、知道存储函数与存储过程的相同和不同点

到此这篇关于MySQL之存储函数详细介绍的文章就介绍到这了,更多相关MySQL存储函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 细谈Mysql的存储过程和存储函数

    1 存储过程 1.1 什么是存储过程 存储过程是一组为了完成某项特定功能的sql语句集,其实质上就是一段存储在数据库中的代码,他可以由声明式的sql语句(如CREATE,UPDATE,SELECT等语句)和过程式sql语句(如IF...THEN...ELSE控制结构语句)组成.存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用. 1.2 存储过程的优缺点 优点: 1.可增强sql语言的功能和灵活性 存储过程可以用流程控制语言编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算.

  • mysql创建存储过程及函数详解

    目录 1. 存储过程 1.1. 基本语法 1.2 创建一个指定执行权限的存储过程 1.3 DELIMITER 的使用 2. 创建函数  1. 存储过程 1.1. 基本语法 create procedure name ([params]) UNSIGNED [characteristics] routine_body  params : in|out|inout 指定参数列表 代表输入与输出 routine_body: SQL代码内容,以begin ........   end character

  • MYSQL的存储过程和函数简单写法

    什么是存储过程 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法: ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用: 有哪些特性 有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能: 函数的普遍特性:模块化,封装,代码复用: 速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省

  • MySQL空间数据存储及函数

    目录 一.数据类型 1.什么是MySQL空间数据 2.什么是geojson 3.格式化空间数据类型(geometry相互转换geojson) 二.空间分析 1.根据点位及半径,生成缓冲区 三.判断点位所在城市 四.常用的空间函数 前言: 不久前开发了一个地图相关的后端项目,需要提供一些点线面相关的存储.查询.分析相关的操作,于是对MySQL空间函数进行充分调研并应用在项目中;MySQL为空间数据存储及处理提供了专用的类型geometry(支持所有的空间结构),还有有细分类型Point, Line

  • MySQL之存储函数详细介绍

    目录 1.创建存储函数 2 .调用存储函数 3.删除存储函数 4.查看存储过程 5.修改存储函数 6.对比存储函数和存储过程 7.练习题加强 1.创建存储函数 语法格式: CREATE FUNCTION 函数名(参数名 参数类型,...) RETURNS 返回值类型 BEGIN 函数体 #函数体中肯定有 RETURN 语句 END 说明: 参数列表: FUNCTION中总是默认为IN参数 RETURNS 后的语句表示函数返回数据的类型: RETURNS子句只能对FUNCTION做指定,对函数而言

  • MySQL中字符串函数详细介绍

    符串或串(String)是由零个或多个字符组成的有限序列.一般记为 s='a1a2•••an'(n>=0).它是编程语言中表示文本的数据类型. 通常以串的整体作为操作对象,如:在串中查找某个子串.求取一个子串.在串的某个位置上插入一个子串以及删除一个子串等.两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等.设p.q是两个串,求q在p中首次出现的位置的运算叫做模式匹配.串的两种最基本的存储方式是顺序存储方式和链接存储方式. 下面我们来看看MySQL中的字符串函数 假如结果的长度

  • Mysql字符串处理函数详细介绍、总结

    一.简明总结ASCII(char) 返回字符的ASCII码值BIT_LENGTH(str) 返回字符串的比特长度CONCAT(s1,s2-,sn)   将s1,s2-,sn连接成字符串CONCAT_WS(sep,s1,s2-,sn) 将s1,s2-,sn连接成字符串,并用sep字符间隔INSERT(str,x,y,instr) 将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果FIND_IN_SET(str,list) 分析逗号分隔的list列表,如果发现str,返回

  • MySQL高级查询示例详细介绍

    目录 1.左关联 2.右关联 3.子查询 4.联合查询 5.分组查询 1.左关联 MySQL中的左关联(Left Join)是一种基于共同列的连接操作, 它将左侧表中的所有行与右侧表中匹配的行结合在一起, 如果右侧表中没有匹配的行,则结果集中右侧表中的所有列将显示为NULL. 左侧表是指在关键字LEFT JOIN中出现在关键字左侧的表. 下面是一个使用MySQL的LEFT JOIN进行连接操作的简单示例: 假设我们有两个表,一个是学校表(school),包含学校的ID和名称: 另一个是年级表(g

  • mysql数据库之索引详细介绍

    目录 思维导图 简单理解 索引模型的演变 二叉查找树 自平衡二叉树 B树 B+树 聚集索引与二级索引 总结 如果你想深入了解为什么mysql可以快速的进行检索数据,那么你一定要来了解一下mysql的索引原理 思维导图 简单理解 你可以把索引理解为一本书的目录,我们可以通过索引快速的找到我们需要的数据,大概就像下面这个图,索引就像是右边的二叉树,每个节点指向具体的数据的物理地址,先通过二叉树找到数据的位置,然后再去物理磁盘中获取数据. 但是不同的二叉树的特性不同,我们还要选择合适的树来作为索引,所

  • MySQL的存储函数与存储过程的区别解析

    MySQL存储函数(自定义函数),函数一般用于计算和返回一个值,可以将经常需要使用的计算或功能写成一个函数. 存储函数和存储过程一样,都是在数据库中定义一些 SQL 语句的集合. 存储函数与存储过程的区别 1.存储函数有且只有一个返回值,而存储过程可以有多个返回值,也可以没有返回值. 2.存储函数只能有输入参数,而且不能带in, 而存储过程可以有多个in,out,inout参数. 3.存储过程中的语句功能更强大,存储过程可以实现很复杂的业务逻辑,而函数有很多限制,如不能在函数中使用insert,

  • 详解MySQL中存储函数创建与触发器设置

    目录 1.创建存储函数 2.调用存储函数 3.创建触发器 4.在触发器中调用存储过程 5.删除触发器 存储函数也是过程式对象之一,与存储过程相似.他们都是由SQL和过程式语句组成的代码片段,并且可以从应用程序和SQL中调用.然而,他们也有一些区别: 1.存储函数没有输出参数,因为存储函数本身就是输出参数. 2.不能用CALL语句来调用存储函数. 3.存储函数必须包含一条RETURN语句,而这条特殊的SQL语句不允许包含于存储过程中 1.创建存储函数 使用CREATE FUNCTION语句创建存储

  • Mysql表的操作方法详细介绍

    目录 创建表 查看表结构 修改表 删除表 创建表 语法: CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 说明: field 表示列名 datatype 表示列的类型 character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准 collate 校验规则,如果没有指定校验规则,则以

  • MySQL的存储函数与存储过程相关概念与具体实例详解

    目录 MySQL存储过程与存储函数的相关概念 存储过程 存储函数 存储函数与存储过程的对比 存储过程和函数的查看修改删除 MySQL存储过程与存储函数的相关概念 存储函数和存储过程的主要区别: 存储函数一定会有返回值的 存储过程不一定有返回值 存储过程和函数能后将复杂的SQL逻辑封装在一起,应用程序无需关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可 存储过程 一组预先编译的SQL语句的封装 执行过程:执行过程预先存储在MySQL服务器上,需要执行的时候,客户端只需要

  • Docker 存储驱动详细介绍

    Docker 存储驱动详细介绍 最近做项目,期间对Docker 存储驱动不会,于是在网上找资料,并解决了,这里就记录下. 目的 理解docker的存储方式 docker的image和container在host上的目录结构 docker image和container的内容与配置不同存储 Docker是一个开源的应用容器引擎,主要利用Linux内核namespace实现沙盒隔离,用Cgroup实现资源限制.Docker用于统一开发和部署的轻量级 Linux 容器,试图解决"依赖地狱"问

随机推荐