加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL中如何定义一个自己写的函数

发布时间:2022-09-13 16:12:59 所属栏目:MySql教程 来源:
导读:  在MySQL中存储着一系列的SQL语句,调用函数就是一次性执行这些语句。所以函数可以降低语句的重复。

  但要注意到函数是注重返回值的mysql自定义函数教程,不注重执行的过程,所以一些语句是无法执行的。
  在MySQL中存储着一系列的SQL语句,调用函数就是一次性执行这些语句。所以函数可以降低语句的重复。
 
  但要注意到函数是注重返回值的mysql自定义函数教程,不注重执行的过程,所以一些语句是无法执行的。
 
  所以函数并不是单纯的SQL的语句集合。
 
  MySQL不仅仅有着它自己本身定义好的函数,数据库管理员也是可以按需求去自己定义函数。
 
  数据库中的函数
 
  戳这里 ====》 数据库中一些函数
 
  创建自定义函数
 
  主要体现在查询方面
 
  函数类似于存储过程存储过程的了解
 
  DELIMITER $$
  CREATE
      /*[DEFINER = { user | CURRENT_USER }]*/
      FUNCTION 函数名([参数列表]) RETURNS 返回的数据类型
      BEGIN
       DECLARE 变量;
       sql语句;
       RETURN 返回值;
      END$$
  DELIMITER ;
  注意:
 
  参数列表是包含两个部分的:参数名 参数类型。函数体:肯定会有return语句,如果没有就会报错。函数体中仅有一句话的时候,是可以省略begin end 的。使用delimter语句设置结束标记。默认函数必须有参数值的,但我们可以设置它为无参的函数。
 
  SET GLOBAL log_bin_trust_function_creators=TRUE;
  举例:
 
  先创建一个数据表:
 
  在这里插入图片描述
 
  创建一个不带参数的函数:
 
  DELIMITER $$
  CREATE
      FUNCTION `demo1`() RETURNS INT
      BEGIN
   DECLARE s_count INT DEFAULT 0;
   SELECT COUNT(*) INTO s_count FROM student;
   RETURN s_count;
      END$$
  DELIMITER ;
  调用这个函数:
 
  SELECT demo1();
  创建一个带参的函数
 
  DELIMITER $$
  CREATE
      FUNCTION `demo2`(s_sex CHAR(1)) RETURNS VARCHAR(10)
      BEGIN
   DECLARE r_sex VARCHAR(10) DEFAULT '';
   IF s_sex = '男' THEN
 
       SET r_sex = '这个人为男生';
   ELSE
       SET r_sex = '这个人为女孩子';
   END IF;
   RETURN r_sex;
      END$$
  DELIMITER ;
  调用这个函数
 
  SELECT demo2(sex) FROM student;
  在这里插入图片描述
 
  修改自定义函数
 
  虽然在这可以使用ALTER FUNCTION的语句来修改自定义的函数的某些特征。但若要修改自定义函数的内容,是必须删除该自定义的函数,然后再重新创建。
 
  但我建议,为了方便一些,也因为创建函数都比较短,所以我都会删除mysql自定义函数教程,再 重新写一遍。
 
  删除自定义的函数
 
  自定义函数被创建后,是会一直保存在数据库服务器上的,直至它被删除。
 
  删除自定义的函数方法与删除存储过程的方法基本是一样的。可以使用DROP FUNCTION来实现的。
 
  DROP FUNCTION [IF EXISTS] <自定义函数名>
  自定义函数名:指定要删除的自定义函数的名称。IF EXISTS:指定关键字,用于防止因误删除不存在的自定义函数而引发错误。(就是如果有的意思,可以不写)
 
  举例:
 
  DROP FUNCTION demo2;
 
  就表示已经删除成功了。
 

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!