Bootstrap

MySQL 函数,选择,循环

MySQL 允许用户定义自己的函数,这些函数可以像内置函数一样在 SQL 查询中使用。自定义函数可以帮助简化复杂的计算、数据转换或者重复的逻辑。

在 MySQL 中创建自定义函数,通常需要以下几个步骤:

创建自定义函数

定义函数

使用 CREATE FUNCTION 语句来定义函数,指定函数的名称、参数以及函数体(即函数执行的逻辑)。

DELIMITER //

CREATE FUNCTION hello_world()
RETURNS VARCHAR(50)
BEGIN
    DECLARE message VARCHAR(50);
    SET message = 'Hello, World!';
    RETURN message;
END //

DELIMITER ;

上面的示例定义了一个名为 hello_world 的简单函数,它不接收参数并返回一个字符串。

  • DELIMITER 用于改变语句分隔符,因为函数体中可能包含多条 SQL 语句,需要指定一个非常用的分隔符(这里用 //)。
  • CREATE FUNCTION 语句定义了函数的名称、返回类型 (RETURNS VARCHAR(50)) 和函数体。
  • DECLARE 用于声明变量,这里声明了一个 message 变量来存储要返回的消息。
  • RETURN 语句用于返回结果。

定义参数化函数

你也可以定义带有参数的函数:

DELIMITER //

CREATE FUNCTION add_numbers(a INT, b INT)
RETURNS INT
BEGIN
    DECLARE result INT;
    SET result = a + b;
    RETURN result;
END //

DELIMITER ;

这个示例定义了一个 add_numbers 函数,接收两个整数参数并返回它们的和。

调用自定义函数

定义完函数后,可以像调用内置函数一样在 SQL 查询中调用它们:

SELECT hello_world(); -- 输出 'Hello, World!'
SELECT add_numbers(3, 5); -- 输出 8

删除自定义函数

如果需要删除一个已经存在的自定义函数,可以使用 DROP FUNCTION 语句:

DROP FUNCTION IF EXISTS hello_world;

这会删除名为 hello_world 的函数,如果该函数不存在则不会报错。

注意事项:

  • 自定义函数中可以包含流程控制语句(如 IF...ELSECASE 等)、循环语句和 SQL 查询语句。
  • 函数的定义中可以包含变量的声明和赋值,但要注意变量作用域和生命周期。
  • 自定义函数可以帮助优化和组织复杂的 SQL 查询,避免重复编写相同的逻辑。

选择

if选择

语法:

if (表达式) then 执行语句;执行语句;执行语句;

elseif (表达式) then 执行语句;执行语句;执行语句;

else 执行语句;

end if;

#例子: 定义一个函数,判断输入的是正数,负数还是零
drop function if exists myfun;
delimiter //
create function myfun (a int)
returns varchar(45)
begin
	declare res varchar(45) default '';
		if(a>0) then set res = '正数';
		elseif(a<0) then set res = '负数';
		else set res = '零';
		end if;
	return res;

end //
delimiter ;

case选择

1.case 变量---语法:

case 变量 when 值1 then 执行语句;

                when 值2 then 执行语句;

                when 值3 then 执行语句;

end case;

#例子: 定义一个函数,判断输入的是正十,负十还是零
drop function if exists myfun;
delimiter //
create function myfun (a int)
returns varchar(45)
begin
    declare res varchar(45) default '';
		case a when -10 then set res = '正十';
			   when 10  then set res = '负十';
			   when 0   then set res = '零';
		end case;
	return res;
end//
delimiter;

这里case 一个变量就只能when 具体的值,想要范围可以使用另一种写法。

2.case ---语法:

case when 表达式1 then 执行语句;

when 表达式2 then 执行语句;

when 表达式3 then 执行语句;

when 表达式4 then 执行语句;

end case;

drop function if exists myfun;
delimiter //
create function myfun(a int)
returns varchar(45)
begin
	declare res varchar(45) default '';
		case when (a>0) then set res = '正数';
				 when (a<0) then set res = '负数';
				 when (a=0) then set res = '零';
		end case;
	return res;
end //
delimiter ;

这样写可以判断范围。

循环

while循环

语法:

while 循环条件

do

执行语句;

end while;

#累加:1+2+....+a
drop function if exists mysum;
delimiter //
create function mysum(a int)
returns int
begin
	declare res int default 0;
	declare i int default 1;
		while(i<=a)
		do
		set res = res + i;
		set i = i + 1;
		end while;
	return res;
end //
delimiter ;

其他循环

mysql没有for循环,有repeat和loop循环。

;