数据库自定义函数

简介: 一、函数   在数据库中都有函数,这些函数属于系统函。除此之外用户也可以编写用户自定义函数。用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序。调用时如同系统函数一样,如max(value)函数,其value被称为参数。

一、函数

  在数据库中都有函数,这些函数属于系统函。除此之外用户也可以编写用户自定义函数。用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序。调用时如同系统函数一样,如max(value)函数,其value被称为参数。函数一般功能比较简单,对于mysql函数只有传入参数,不像存储过程一样,有输入输出参数。

  数据库函数特点如下:

  • 存储函数将向调用者返回一个且仅返回一个结果值。
  • 存储函数嵌入在sql中使用的,可以在select中调用,就像内建函数一样,比如cos()、hex()。
  • 存储函数的参数类型类似于IN参数。

二、自定义函数

自定义函数简单语法:

CREATE FUNCTION 函数名称(
  变量名称 类型,
  变量名称 类型
)
RETURN 类型
BEGIN
  -- 声明, 语句要完成的操作,
RETURN 变量;
END;

三、实例

  例子中的函数使用mysql作为例子。 表结构如下:

DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

   1、不带参数的函数

DROP FUNCTION IF EXISTS get_count;
 -- 定义函数
CREATE FUNCTION get_count() 
RETURNS INT -- 返回值类型
BEGIN 
     RETURN (SELECT COUNT(*) FROM person);
END;
-- 调用
SELECT get_count() AS 'total';

   表示获取person表的所有记录,没有参数,有数值返回值。

  2、带有参数的函数

DROP FUNCTION IF EXISTS get_age;
CREATE FUNCTION get_age(
         id INT(11)  -- 参数(参数可以多个)
)
RETURNS INT(11)    -- 返回值类型(只能有一个返回值)
BEGIN 
    DECLARE age INT; -- 定义变量
    SET age = (SELECT p.age FROM person p where p.id = id);
    IF(ISNULL(age)) THEN -- 查询到的年龄不存在(如id错误,没有记录存在)
        RETURN 0; 
    ELSE
        RETURN age;
    END IF;
END;
-- 函数调用
SELECT get_age(2) as 'age';

  表示通过id获取年龄,有id参数,有数值返回值。

  3、函数其他命令

SELECT get_age(2);    -- 函数的调用
SHOW FUNCTION STATUS; -- 查看所有函数
SHOW CREATE FUNCTION get_age; -- 查看具体函数
DROP FUNCTION  get_age;  -- 删除查看具体函数

  函数的功能一般都是比较简单的,如求某个值,格式转换等。不像存储过程,一般逻辑都比较复杂。

目录
相关文章
|
5月前
|
关系型数据库 Java 数据库
PostgreSql | 数据库 |自定义函数的设计和实现
PostgreSql | 数据库 |自定义函数的设计和实现
61 0
|
关系型数据库 MySQL 数据库
MySQL数据库(30):内置函数和自定义函数 function
MySQL数据库(30):内置函数和自定义函数 function
157 0
MySQL数据库(30):内置函数和自定义函数 function
|
23天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
25天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
182 11
|
20天前
|
存储 SQL 关系型数据库
MySQL的安装&数据库的简单操作
本文介绍了数据库的基本概念及MySQL的安装配置。首先解释了数据库、数据库管理系统和SQL的概念,接着详细描述了MySQL的安装步骤及其全局配置文件my.ini的调整方法。文章还介绍了如何启动MySQL服务,包括配置环境变量和使用命令行的方法。最后,详细说明了数据库的各种操作,如创建、选择和删除数据库的SQL语句,并提供了实际操作示例。
59 13
MySQL的安装&数据库的简单操作
|
26天前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
114 14
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
1天前
|
SQL 关系型数据库 MySQL
数据库:MYSQL参数max_allowed_packet 介绍
数据库:MYSQL参数max_allowed_packet 介绍
10 2
|
7天前
|
关系型数据库 Unix MySQL
MySQL是一种关系型数据库管理系统
MySQL是一种关系型数据库管理系统
19 2
|
10天前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
37 2