数据库系列之mysql 自定义函数function,函数和存储过程的区别
mysql 自定义函数function,函数和存储过程的区别
https://blog.csdn.net/u010365819/article/details/80470448
https://blog.csdn.net/mengzuchao/article/details/80686792
https://www.cnblogs.com/progor/p/8871480.html
https://blog.csdn.net/qq_26963433/article/details/78601606
https://blog.csdn.net/atares0223/article/details/50147813
DROP FUNCTION IF EXISTS test.formatDate $$
1.MySQL自定义函数简介
在MySQL中使用自定义函数也需要相应的要求,语法如下,
创建新函数:
Create function function_name(参数列表)
returns返回值类型
函数体内容
相关说明,
- 函数名:应该合法的标识符,并且不应该与已有的关键字冲突。一个函数应该属于某数据库,可以使用db_name.funciton_name的形式执行当前函数所属数据库
,否则默认为当前数据库。
- 参数列表:可以有一个或者多个函数参数,甚至是没有参数也是可以的。对于每个参数,由参数名和参数类型组成。
- 返回值:指明返回值类类型
- 函数体:自定义函数的函数体由多条可用的MySQL语句,流程控制,变量声明等语句构成。需要指明的是函数体中一定要含有return 返回语句。
2.自定义示例
a.无参函数定义
mysql> DROP FUNCTION IF EXISTS hello; Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> DELIMITER $$ mysql> CREATE FUNCTION hello()-> RETURNS VARCHAR(255)-> BEGIN-> RETURN 'Hello world,i am mysql';-> END $$ Query OK, 0 rows affected (0.11 sec)
调用自定义函数:
mysql> DELIMITER ; mysql> SELECT hello(); +-------------------------+ | hello() | +-------------------------+ | Hello world,i am mysql | +-------------------------+ 1 row in set (0.00 sec)
可见已经调用成功了,需要注意的几点
之所以使用DELIMITER是因为MySQL中默认是使用分号来结束一个命令的,我们定义的函数体中一条命令写完时会用分号来结束,而MySQL会误以为函数体已经定义完成,因为我们需要定义一个新的标识符来标识一个命令的结束,因为就可以使用DELIMITER。
b:含有参数的自定义函数
在我们格式化日期的时候我们会调用DATE_FORMAT(date,format)函数,第一个参数是日期第二个参数是需要格式化的格式,也就是说需要传递两个参数,我们现在就把这个函数给改下
mysql> DELIMITER $$ mysql> DROP FUNCTION IF EXISTS test.formatDate $$ Query OK, 0 rows affected, 1 warning (0.07 sec)mysql> CREATE FUNCTION test.formatDate(fdate datetime)-> RETURNS VARCHAR(255)-> BEGIN-> DECLARE x VARCHAR(255) DEFAULT '';-> SET x= date_format(fdate,'%Y年%m月%d日%h时%i分%s秒');-> RETURN x;-> END $$ Query OK, 0 rows affected (0.11 sec)mysql> DELIMITER ; mysql> SELECT formatDate(now()); +----------------------------+ | formatDate(now()) | +----------------------------+ | 2014年11月21日03时41分21秒 | +----------------------------+ 1 row in set (0.18 sec)
这样当我们需要定制这样的函数时就可以自己实现了,那就是通过含参的自定义函数。
自定义函数和存储过程的区别:
1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。
2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类~~存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。
3)存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。
4)存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。
转载于:https://www.cnblogs.com/PrestonL/p/9681638.html
数据库系列之mysql 自定义函数function,函数和存储过程的区别相关推荐
- 数据库学习之MySQL (九)—— 数学函数 字符串函数 CONCAT TRIM PAD
MySQL学习专栏 正在持续更新中:) 文章目录 复习一下 前面学到的函数 LENGTH CONCAT 数学函数 ABS CEIL FLOOR ROUND POW 常用字符串函数 SUBSTR REP ...
- mysql 自定义哈希函数_C++ STL无序容器自定义哈希函数和比较规则(超级详细)...
前面在讲解 unordered_map.unordered_multimap.unordered_set 以及 unordered_multiset 这 4 种无序关联式容器(哈希容器)时,遗留过一个 ...
- 〖Python 数据库开发实战 - MySQL篇⑰〗- 聚合函数的使用
万叶集
- 【Mysql数据库系列】Mysql锁表信息查看与解决
解除mysql数据库锁表状态的两种方法 第一种: 1.查询是否锁表 show open tables where in_use > 0; 2.查询进程 show processlist; 或 s ...
- MySql中游标的定义与使用方式_数据库系列:MySql中游标的定义与使用方式
创建游标 首先在MySql中创建一张数据表: CREATE TABLE IF NOT EXISTS `store` ( `id` int(11) NOT NULL AUTO_INCREMENT, `n ...
- 死磕数据库系列(三十三):MySQL 性能分析与相关工具的使用
点关注公众号,回复"1024"获取2TB学习资源! 今天我将详细的为大家介绍 MySQL 性能分析以及相关工具使用的相关知识,希望大家能够从中收获多多!如有帮助,请点在看.转发支持 ...
- 死磕数据库系列(三十五):MySQL 数据库性能监控
点关注公众号,回复"1024"获取2TB学习资源! 前面给大家介绍了:MySQL 性能分析与相关工具的使用.今天我将详细的为大家介绍 MySQL 性能监控的相关知识,希望大家能够从 ...
- PHP基础-自定义函数-变量范围-函数参数传递
一.自定义函数 function 函数名([形式参数1,形式参数2,....形式参数n]){ //各种PHP代码.... //...... re ...
- 死磕数据库系列(二十六):MySQL 高可用之单主、双主模型组复制配置实践
点关注公众号,回复"1024"获取2TB学习资源! 前面我们学习:MySQL 高可用之组复制(MGR)技术的相关原理知识,今天我将详细的为大家介绍 MySQL 高可用技术组复制的单 ...
最新文章
- EJSS: 南土所梁玉婷组-生境决定了土壤植物系统中细菌、抗性基因和可移动元件间的关系...
- oracle 10g rac重建crs
- HALCON识别数字ID
- 生活娱乐 达尔优的键盘鼠标如何打开和关闭呼吸灯
- 安装kilo版本openstack-dashboard时出现的python compress command not found错误解决办法
- c++工程师面试常见问题之c++中四种cast转换
- 【Python】字符转换为 ASCII 码
- LintCode 183. 木材加工(二分查找)
- 外设驱动库开发笔记31:S-Modlue远红外气体传感器驱动
- 95-134-110-源码-维表-Flink 1.9.0 维表实现
- 解释logistic回归为什么要使用sigmoid函数
- “iPhone 3 年内必死!”
- php和python-PHP与Python语言有哪些区别之处?选择哪一个好?
- python分秒换算_度换算成度分秒的Python操作方法
- Creator打字机效果
- 所有键都无法进入bios(按任何键都进不去bios)
- 基于JAVA郑州卷烟厂库存管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
- 【ZeloEngine】ImGui汇总
- 笔记:文澜:桥接视觉和语言的大规模多模态预训练 WenLan: Bridging Vision and Language by Large-Scale Multi-Modal Pre-Training
- PLsql(PLSQL Developer)安装与配置
热门文章
- SQL优化技巧--远程连接对象引起的CTE性能问题
- debian安装搜狗
- Flex实现分页显示功能(mx:DataGrid)
- simply scheme 第一章 练习+ 看书计划
- WQL Analyzer V1.1(WMI查询分析器)
- 黄斑区隆起原因诊断过程+黄斑反复水肿问题
- Can‘t attach to the process: ptrace(PTRACE_ATTACH, ..)
- Yarn申请的内存的精确计算(转载+应用到自己的情况中)
- 宽带651以及光猫红色灯闪烁-故障维修
- groupByKey、reduceByKey区别(转)