数据库系列之mysql 自定义函数function,函数和存储过程的区别

mysql 自定义函数function,函数和存储过程的区别

https://blog.csdn.net/u010365819/article/details/80470448

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

时间: 2024-08-06 16:06:46

数据库系列之mysql 自定义函数function,函数和存储过程的区别的相关文章

数据库系列之T-SQL(系统内置函数)

ROW_NUMBER() 语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号. 示例: xlh           row_num 1700              1 1500              2 1085

python操作mysql数据库系列-安装MySql数据库

1.首先下载mysql我选择的版本是5.7.19 基于64位的windows操作系统.mysql的下载地址传送门:https://dev.mysql.com/downloads/mysql/  这里面有不同操作系统的安装包大家有需要都可以自行去下载. 具体安装如下: 1.把 mysql-8.10-winx64zip 压缩文件解压到 D:\application\mysql 目录下: 2.在  D:\application\mysql目录下新建 my.ini 配置文件: 3.用文本编辑器或其他编辑

【数据库系列】MySql中的select的锁表范围

由于InnoDB预设的是Row-Level Lock,只有明确指定主键的时候MySql才会执行Row lock,否则MySql将会执行Table Lock. 1.明确指定主键则是行锁 2.明确指定主键,若无数据则无锁 3.无主键,table lock 4.主键不明确,table lock 注:MyAsim只支持表级锁,InnerDB支持行级锁,添加了(行级锁/表级锁)锁的数据不能被其他事务再锁定.也不能被其他事务修改.

PHP基础-自定义函数-变量范围-函数参数传递

一.自定义函数    function 函数名([形式参数1,形式参数2,....形式参数n]){        //各种PHP代码....        //......        return 表达式;//也可以不返回,如果不写那么默认返回null    }        函数的调用:        函数的调用需要遵循定义函数的时候写的规则,一一对应,将具体的实际参数传给定义函数时候写的形式参数!        调用函数之后执行的过程是相对独立的,互补干扰,默认没有联系!        

ES6——函数-箭头函数

箭头函数: 1.普通函数 function 函数名(){...} 2.箭头函数 注意:  1)如果只有一个返回值,{}return可以省略: let arr = [12,5,8,99,33,14,26]; arr.sort(function(a,b){ return a-b; //从小到大输出 = 数组顺序输出 }); alert(arr); // 输出:5,8,12,14,26,33,99 // 箭头函数:let arr = [12,5,8,99,33,14,26]; arr.sort((a,

MySQL 自定义函数CREATE FUNCTION实例

分享一个MySQL 自定义函数CREATE FUNCTION的实例.mysql> delimiter $$mysql> CREATE FUNCTION myFunction-> (in_string VARCHAR(255),-> in_find_str VARCHAR(20),-> in_repl_str VARCHAR(20))->-> RETURNS VARCHAR(255)-> BEGIN-> DECLARE l_new_string VARC

MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁

浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视图有如下特点; 1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系. 2. 视图是由基本表(实表)产生的表(虚表). 3. 视图的建立和删除不影响基本表. 4. 对视图内容的更新(添加.删除和修改)直接影响基本表. 5. 当视图来自多个基本表时,不允许添加,修改和删除数据. 1.创建

数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件

浏览目录 视图 触发器 存储过程 函数 事务 数据库锁 数据库备份 事件 一.视图 1.视图概念 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据. 2.视图特点 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系 视图是由基本表(实表)产生的表(虚表) 视图的建立和删除不影响基本表 对视图内容的更新(添加.删除和修改)直接影响基本表 当视图来自多个基本表时,不允许添加,修改和删除数据 3.视图的本质 视图是根据SQL语句获取动态的数据集,并为其命

MySQL数据库8(二十四)函数

函数 在MySQL中,函数分为两类:系统函数(内置函数)和自定义函数 不管是内置函数还是用户自定义函数,都是使用select函数名(参数列表) 内置函数 字符串函数 Mysql8 字符串函数 https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_instr char_length():判断字符串的字符数 length():判断字符串的字节数(与字符集) concat():连接字符串 instr():判断字符在