存储过程:数据库里的 "定制工具箱"

存储过程就像一个装满工具的箱子,你需要什么功能,就调用对应的工具。它是用 SQL 语句写好的一段程序,存储在数据库里,随时可以调用。

创建存储过程 就像在工具箱里放新工具。比如,我们创建一个计算学生总分的存储过程:

delimiter //
create procedure p_calAvg()
BEGIN
    select name, chinese + math + english as total from exam;
END //
delimiter ;

delimiter // 是在告诉数据库,我们暂时不用普通的分号 ; 结束语句,而是用 //,这样就能完整地创建存储过程啦!创建完成后别忘了用 delimiter ; 把分号变回来哦。

调用存储过程 就像从工具箱里拿出工具用:

call p_calAvg();

存储过程能减少网络传输,提高性能,就像把常用工具放在手边,随用随取。

变量:数据库里的 "小纸条"

在 MySQL 里,变量就像小纸条,把数据暂时记在上面,之后再用。

系统变量:数据库自带的 "便签"

系统变量是数据库自己准备好的便签,分为全局(所有用户都能看)和会话(只给自己看)两种:

  • 查看系统变量:SHOW VARIABLES LIKE 'character_set_server';

  • 设置系统变量:SET GLOBAL character_set_server = 'utf8mb4';

用户自定义变量:你的专属 "记事本"

你可以自己创建变量来保存临时数据:

SET @var_name = 123;  -- 赋值
SELECT @var_name;    -- 使用

局部变量:存储过程里的 "便签条"

在存储过程里,变量只能在过程里用,像这样:

DECLARE var_name INT DEFAULT 0;

变量能帮你保存中间结果,方便后续操作,就像做数学题时先把步骤记下来,最后再算出答案。

SQL 编程:让数据库学会 "思考"

SQL 也能像编程一样,根据条件做不同操作,甚至循环执行,就像给数据库装上了 "聪明大脑"。

条件语句:数据库的 "选择题"

IF 语句 就像给数据库出选择题:

IF score >= 90 THEN
    SET grade = 'A';
ELSEIF score >= 60 THEN
    SET grade = 'B';
ELSE
    SET grade = 'C';
END IF;

CASE 语句 像更灵活的选择题,有两种写法:

  • 简单 CASE:CASE var_name WHEN 1 THEN 'A' WHEN 2 THEN 'B' ELSE 'C' END

  • 搜索结果 CASE:CASE WHEN score >= 90 THEN 'A' WHEN score >= 60 THEN 'B' ELSE 'C' END

循环语句:数据库的 "重复播放"

WHILE 循环 像设置个条件,满足就一直执行:

WHILE i <= 10 DO
    SET sum = sum + i;
    SET i = i + 1;
END WHILE;

REPEAT 循环 则是先执行,再判断是否继续:

SET i = 0;
REPEAT
    SET sum = sum + i;
    SET i = i + 1;
UNTIL i > 10
END REPEAT;

LOOP 循环 像个简单的重复播放,配合 LEAVE(跳出循环)和 ITERATE(继续循环):

outer_loop: LOOP
    INNER LOOP: LOOP
        IF i > 5 THEN
            LEAVE outer_loop;
        END IF;
        SET i = i + 1;
        ITERATE INNER LOOP;
    END LOOP;
END LOOP;

游标:数据的 "快递员"

游标能把查询结果一行行地送过来,方便你逐个处理:

  1. 声明游标:DECLARE cursor_name CURSOR FOR select...

  2. 打开游标:OPEN cursor_name;

  3. 获取数据:FETCH cursor_name INTO var_name1, var_name2;

  4. 关闭游标:CLOSE cursor_name;

条件处理程序:数据库的 "安全员"

条件处理程序能帮数据库应对各种异常情况,就像给它配了个安全员:

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
    SET error_count = error_count + 1;

存储函数:数据库的 "小助手"

存储函数就像数据库的小助手,能返回计算结果:

CREATE FUNCTION Fun(n INT) RETURNS INT DETERMINISTIC
BEGIN
    DECLARE total INT DEFAULT 0;
    WHILE n > 0 DO
        SET total = total + n;
        SET n = n - 1;
    END WHILE;
    RETURN total;
END

调用时直接用 SELECT Fun(10); 就能拿到结果啦!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐