【MySQL进阶之路 | 基础篇】存储函数

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【MySQL进阶之路 | 基础篇】存储函数

1. 存储函数

(1). 语法格式 :

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

(2). 说明 :


  • 参数列表 : 在存储函数FUNCTION中的参数列表中,总是默认为IN参数.
  • 必须指明RETURNS 返回值的类型.RETURNS子句只能对FUNCTION做限定,对函数而言是强制性的.用来指定函数的返回值类型.因为函数的函数体必须包含以一个RETURN子句返回一个值.
  • characteristic创建函数时指定的对函数的约束.其与存储过程类似.
  • 由于存储函数一定会返回一个值,所以调用存储函数的格式为SELECT 函数名(实参列表).

2. 创建存储函数

例1 :

  • 创建存储函数,必须添加characteristic约束,不然会报错.
  • 存储函数的函数体必有RETURN语句.

例2 :

3. 对比存储函数与存储过程

(1). 关键字

  • 存储过程 : PROCEDURE.
  • 存储函数 : FUNCTION.

(2). 调用语法

  • CALL存储过程.
  • SELECT 存储函数.

(3). 返回值

  • 理解为0个或多个.
  • 只能是一个值.

(4). 应用场景

  • 一般用于更新.
  • 一般用于查询结果为一个值并返回.

存储函数可以放在查询语句中,而存储过程不可以.但存储过程的功能显然更加强大,包括能够执行对表的操作和事务操作,这是存储函数不具备的.

4. 存储过程/函数的查看与修改

(1). 查看

(1). 方式1 :

SHOW CREATE FUNCTION count_by_id;

(2). 方式2 :

SHOW FUNCTION STATUS LIKE 'count_by_id';

(3). 方式3:

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

SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='count_by_id' AND ROUTINE_TYPE = 'FUNCTION';

(2). 修改

修改存储过程或函数,不影响其功能,只是修改其特性.

ALTER {PROCEDURE | FUNCTION} 存储过程或函数的名 [characteristic ...]

(3). 删除

可以删除存储过程或存储函数,使用DROP子句完成.

DROP FUNCTION count_by_id1;

5. 存储函数的优劣

(1). 优点

  • 存储过程可以一次编译多次使用 : 存储过程只在创建时进行编译,之后的使用都不需要重新编译,这就提升了 SQL 的执行效率。
  • 可以减少开发工作量 : 将代码 封装 成模块,实际上是编程的核心思想之一,这样可以把复杂的问题拆解成不同的模块,然后模块之间可以 重复使用 ,在减少开发工作量的同时,还能保证代码的结构清晰。
  • 存储过程的安全性强 : 我们设定存储过程的时候可以 设置对用户的使用权限 ,这样就和视图一样具有较强的安全性。
  • 可以减少网络传输量 : 因为代码封装到存储过程中,每次使用只需要调用存储过程即可,这样就减少了网络传输量。
  • 良好的封装性 : 在进行相对复杂的数据库操作时,原本需要使用一条一条的 SQL 语句,可能要连接多次数据库才能完成的操作,现在变成了一次存储过程,只需要 连接一次即可 。

(2). 缺点

  • 可移植性差 : 存储过程不能跨数据库移植,比如在 MySQL、Oracle 和 SQL Server 里编写的存储过程,在换成其他数据库时都需要重新编写。
  • 调试困难 : 只有少数 DBMS 支持存储过程的调试。对于复杂的存储过程来说,开发和维护都不容易。虽然也有一些第三方工具可以对存储过程进行调试,但要收费。
  • 存储过程的版本管理很困难 : 比如数据表索引发生变化了,可能会导致存储过程失效。我们在开发软件的时候往往需要进行版本管理,但是存储过程本身没有版本控制,版本迭代更新的时候很麻烦。
  • 它不适合高并发的场景 : 高并发的场景需要减少数据库的压力,有时数据库会采用分库分表的方式,而且对可扩展性要求很高,在这种情况下,存储过程会变得难以维护, 增加数据库的压力 ,显然就不适用了。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
JSON 关系型数据库 MySQL
Mysql(5)—函数
MySQL提供了许多内置的函数以帮助用户进行数据操作和分析。这些函数可以分为几类,包括聚合函数、字符串函数、数值函数、日期和时间函数、控制流函数等。
70 1
Mysql(5)—函数
|
13天前
|
关系型数据库 MySQL Serverless
MySQL函数
最常用的MySQL函数,包括聚合函数,字符串函数,日期时间函数,控制流函数等
|
1月前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
27 2
|
16天前
|
SQL NoSQL 关系型数据库
|
1月前
|
存储 SQL 关系型数据库
MySQL 存储函数及调用
MySQL 存储函数及调用
53 3
|
1月前
|
存储 关系型数据库 MySQL
MySQL 如何存储地理信息
MySQL 如何存储地理信息
94 1
|
1月前
|
缓存 关系型数据库 MySQL
MySQL 满足条件函数中使用查询最大值函数
MySQL 满足条件函数中使用查询最大值函数
120 1
|
2月前
|
存储 SQL 关系型数据库
MySQL基础:函数
本文介绍了MySQL中几种常用的内建函数,包括字符串函数、数值函数、日期函数和流程函数。字符串函数如`CONCAT()`用于拼接字符串,`TRIM()`用于去除字符串两端的空格,`MOD()`求余数,`RAND()`生成随机数,`ROUND()`四舍五入。日期函数如`CURDATE()`返回当前日期,`NOW()`返回当前日期和时间,`DATE_ADD()`添加时间间隔,`DATEDIFF()`计算日期差。流程函数如`IF()`和`CASE WHEN THEN ELSE END`用于条件判断。聚合函数如`COUNT()`统计行数,`SUM()`求和,`AVG()`求平均值
29 8
MySQL基础:函数
|
27天前
|
关系型数据库 MySQL 数据库
mysql中tonumber函数使用要注意什么
在处理这类转换操作时,考虑周全,利用提供的高性能云服务器资源,可以进一步提升数据库处理效率,确保数据操作的稳定性和安全性,尤其是在处理大量数据转换和运算密集型应用时。
84 0
|
2月前
|
存储 关系型数据库 MySQL
深入解析MySQL数据存储机制:从表结构到物理存储
深入解析MySQL数据存储机制:从表结构到物理存储
151 1