MYSQL——自定义函数

  • 自定义函数

    用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同。
    函数可以返回任意类型的值,同样可以接收任意类型的值。接收和返回两者没有必然关系。

  • 2个必要条件
    1.参数 :可以有0个或多个
    2.返回值:只能有一个返回值

  • 创建自定义函数
    CREATE FUNCTION 函数名(参数名1 类型1,参数名2 类型2,…)
    RETURNS 返回类型
    {STRING|INTEGER|REAL|DECIMAL}
    RETURN 函数体
    注意:函数必须有返回值,如果无返回值的,应该创建‘存储过程’(函数返回值只能有一个,存储过程可以没有或多个(通过SELECT),而且存储过程可以通过out为变量赋值,而函数不行)
    另外,函数的参数最好不要和表的字段名字相同,一定要区分开。

  • 关于函数体
    1.函数体由合法的SQL语句构成
    2.函数体可以是简单的SELECT或INSERT语句(允许用SELECT…INTO 变量来把值写入,但不允许SELECT…来返回结果集,因为函数只允许有一个返回值(切记,SELECT会返回结果集,并不是只有RETURN才可以返回))
    3.函数体如果为复合结构则使用BEGIN…END语句
    4.复合结构可以包含声明、循环、控制结构

  • 删除函数
    直接使用DROP FUNCTION 函数名。
  • 创建不带参数的自定义函数
    返回当前时间为年月日时分秒
    CREATE FUNCTION f1()
    RETURNS VARCHAR(50)
    RETURN DATE_FORMAT(NOW(),’%Y年%m月%d日 %H时%i分%s秒’);

调用:SELECT f1();

  • 创建带有参数的自定义函数
    计算(num1+num2)*2
    CREATE FUNCTION f2(num1 INT UNSIGNED,num2 INT UNSIGNED)
    RETURNS FLOAT(10,2) UNSIGNED
    RETURN (num1+num2)*2;

调用:SELECT f2(2,2); 结果:8

  • 创建具有符合结构函数体的自定义函数

表user
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
username VARCHAR(20) NOT NULL

向表user中添加username返回id
(因为用‘;’会认为是sql的结束语句,所以我们可以自定义一下结束符号,
比如:DELIMITER //)
CREATE FUCTION adduser(name VARCHAR(20))
RETURNS INT UNSIGNED
BEGIN
INSERT user(username) VALUES(name);
RETURN LAST_INSERT_ID();
END
//

调用:SELECT adduser(‘jan’);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
存储函数自定义函数是两种不同的概念。引用\[1\]提到,存储函数是在数据库创建的一种函数,它必须有一个return子句用于返回函数值,并且可以通过CREATE FUNCTION语句来创建。而自定义函数是指用户自己定义的函数,可以在程序使用,但不是在数据库创建的。引用\[2\]提到,在MySQL,存储过程和函数可以使用CREATE PROCEDURE和CREATE FUNCTION语句来创建,而自定义函数则可以直接在程序定义。存储过程和函数可以通过CALL语句来调用,而自定义函数可以通过函数名来引用。此外,存储过程和函数可以有输出参数,可以返回多个值,而自定义函数通常只能返回一个标量值。根据引用\[3\]的原则,如果只有一个返回值,通常使用存储函数;如果有多个返回值,通常使用存储过程。 #### 引用[.reference_title] - *1* *3* [Oracle数据库——存储过程和自定义函数](https://blog.csdn.net/hyh17808770899/article/details/106867758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [八、存储过程与自定义函数](https://blog.csdn.net/qq_52059326/article/details/124399461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值