SQL 函数 function 讲解+代码实例

简介: SQL 函数 function 讲解+代码实例

1. 对存储程序的说明


与应用程序(Java或者.NET或者PHP等应用程序)相比,存储程序可维护性高,更新存储程序通常比更改、测试以及重新部署应用程序需要更少的时间和精力。使用存储程序与使用大量离散的SQL语句写出的应用程序相比,更易于代码优化、重用和维护。


不过这并不意味着可以将所有的业务逻辑代码全部封装成存储程序,把业务处理的所有负担全部压在数据库服务器上。事实上数据库服务器的核心任务是存储数据,保证数据的安全性、完整性以及一致性,如果数据库承担了过多业务逻辑方面的工作,势必会对数据库服务器的性能造成负面影响。


对于简单的业务逻辑,在不影响数据库性能的前提下,为了节省网络资源,可以将业务逻辑封装成存储程序。

对于较为复杂的业务逻辑,建议使用高级语言(Java或者.NET或者PHP等)实现,让应用服务器(例如Apache、 IIS等) 承担更多的业务逻辑,保持负载均衡。


最后,无论初学者还是有经验的数据库开发人员,都应该对自己开发的存储程序进行严格的测试,并尽量保存测试步骤、测试数据以及测试结果。


2. 创建函数 create function


创建函数的语法如下:


create [definer = {user|current_user}] function [函数名](参数列表)
returns [返回值类型] [函数特性]
begin
  [SQL代码]
end
-- definer 用于指定存储过程由哪个用户定义,默认是当前用户,注意不是指定存储过程的使用权限
-- [参数列表],参数列表只支持in类型的参数,因此写参数时不需要写in,因为默认就是in
-- [函数特征] 特征是存储过程的属性,它包括了如下几个可选特征
-- -- -- comment '' 注释信息,例如:commet '这是一个存储过程'
-- -- -- language sql 指定存储过程使用的语言为sql
-- -- -- [not] deterministic 是否指定一个输入仅对应一个输出(映射),包含下面2个可选参数
-- -- -- -- -- not deterministic(默认),表示不指定映射关系;
-- -- -- -- -- deterministic,表示指定映射关系
-- -- -- [contains sql | no sql | reads sql data | modifies sql data] 明确子程序对数据的操作,包含下面4个可选参数
-- -- -- -- -- contains sql(默认),表示子程序不包含读或者写数据的语句
-- -- -- -- -- no sql,表示子程序不包含sql
-- -- -- -- -- reads sql data,表示子程序包含读数据的语句,但是不包含写数据的语句
-- -- -- -- -- modifies sql data,表示子程序包含写数据的语句
-- -- -- sql security [definer|invoker] 指定调用权限,包含下面两个可选参数
-- -- -- -- -- sql security definer(默认),使用创建者权限调用存储过程,不受限制
-- -- -- -- -- sql security invoker,使用调用者权限调用存储过程,只有被赋予权限的调用者才能调用


例如:


create function test(id int, user_name varchar(20))
  returns int(5)
  deterministic
begin
  if user_name='111' then
  return 1;
  else 
  return 0;
  end if;
end


3. 调用函数 select


自定义函数的调用十分简单,和sql内置函数一样的使用方法,就是直接select就行


例如:


-- 定义函数
create function test(id int, user_name varchar(20))
  returns int(5)
  deterministic
begin
  if user_name='111' then
  return 1;
  else 
  return 0;
  end if;
end
-- 调用函数
select test(1, '111');


4. 查看函数


4.1. 查看函数状态 show status


查看函数状态的语法如下:


show function status like '[函数名]';

例如:


show function status like 'test';


结果样例如下表所示:


image.png


4.2. 查看函数定义 show create


查看函数定义的语法如下:

show create function [函数名];

例如:

show create function test;

结果样例如下表所示:


image.png


4.3. 查看全部函数信息 information_schema.Routines


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


例如:


select * from information_schema.routines
where routine_name='test5';


结果如下表所示:

image.png


5. 修改函数 alter function


修改函数的特性可以使用alter function关键字,语法如下:


alter function [函数名] [特性];

例如:


-- 修改函数test,使它可以写数据(modifies sql data)
alter function test modifies sql data;


6. 删除函数 drop function


删除函数可以使用drop function关键字,语法如下:


drop function [if exists] [函数名]

例如有一个函数test,则要删除它,可以写成:


-- 如果函数test存在,则删除它
drop procedure if exists test;


相关文章
|
SQL 自然语言处理 数据库
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
348 5
|
10月前
|
SQL 人工智能 数据挖掘
如何在`score`表中正确使用`COUNT`和`AVG`函数?SQL聚合函数COUNT与AVG使用指南
本文三桥君通过score表实例解析SQL聚合函数COUNT和AVG的常见用法。详解COUNT(studentNo)、COUNT(score)、COUNT()的区别,以及AVG函数对数值/字符型字段的不同处理,特别指出AVG()是无效语法。实战部分提供6个典型查询案例及结果,包含创建表、插入数据的完整SQL代码。产品专家三桥君强调正确理解函数特性(如空值处理、字段类型限制)对数据分析的重要性,帮助开发者避免常见误区,提升查询效率。
495 0
|
人工智能 Python
083_类_对象_成员方法_method_函数_function_isinstance
本内容主要讲解Python中的数据类型与面向对象基础。回顾了变量类型(如字符串`str`和整型`int`)及其相互转换,探讨了加法在不同类型中的表现。通过超市商品分类比喻,引出“类型”概念,并深入解析类(class)与对象(object)的关系,例如具体橘子是橘子类的实例。还介绍了`isinstance`函数判断类型、`type`与`help`探索类型属性,以及`str`和`int`的不同方法。最终总结类是抽象类型,对象是其实例,不同类型的对象有独特运算和方法,为后续学习埋下伏笔。
282 7
083_类_对象_成员方法_method_函数_function_isinstance
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
335 17
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
355 11
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
4891 11
|
JavaScript
箭头函数与普通函数(function)的区别
箭头函数是ES6引入的新特性,与传统函数相比,它有更简洁的语法,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。箭头函数不适用于构造函数,不能使用new关键字调用。
|
SQL 数据管理 数据库
SQL语句实例教程:掌握数据查询、更新与管理的关键技巧
SQL(Structured Query Language,结构化查询语言)是数据库管理和操作的核心工具
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
251 0

热门文章

最新文章