MySql存储过程和函数

2022-05-26T07:54:03.png

MySql存储过程和函数

存储过程

  • 创建

    Create producere 过程名([参数])
    BEGIN
    ...
    END;
    

    注: 命令行需要 声明 delimiter 指定SQL语句结束符

  • 调用

    CALL 过程名[(参数)];
    
  • 查看

    SHOW CREATE PRODUCERE 过程名
    
  • 删除

    DROP PRODUCERE 过程名
    

存储语法

  • 变量

    • 系统变量: GLOBAL 全局(所有会话都有效) 会话变量 SESSION(仅在当前所在的会话有效)

      • 查看: SHOW [A|B] VARIABLES;
      • SHOW [A|B] VARIABLES like ‘%%’ 模糊匹配
      • 设置系统变量
        • SET [A|B] 系统变量名 = 值;
    • 用户自定义变量

      • 不用提前声明
      • 用的时候直接 @变量名(@@是系统变量)
      • 赋值:
        • SET @变量名 = 值[,@变量…]
        • SET @变量名 := 值[,@变量…]
        • SELECT 字段名 INTO @变量名 from 表名;
          • 将从表名中查出来的数据给变量
      • 使用: select 字段名;
    • 局部变量

      • 声明: DECLARE 变量名 变量类型[DEFAULT …];

      • 赋值:

        • SET 变量名 = 值

        • SELECT 字段名 INTO @变量名 from 表名;

      • 范围:Begin…end

  • if

    IF 条件1 THEN
     ...
     ELSE IF 条件2 THEN
     ...
     ELSE
     ...
     END IF;
    
  • 参数

    in 输入

    OUT 参数作为输出

    INTO 包含两者

    • 使用

      CREATE PRODUCERE name ([A|B|C] 参数名 参数类型)
      BEGIN
      ..
      END;
      
      -- 例子
      CREATE PRODUCERE name (in 分数 int,out resault varchar(50))
      BEGIN
       if 分数 >= 100 THEN
         SET resault = "优秀";
       ENDIF;
      END;
      
  • CASE

    相当于 C+ Switch

    CASE valu
     WHEN check1 THEN S1
      WHEN check2 THEN S2
      ...
      ELSE Sn
     END CASE
    
  • while

    While 条件 DO
    	...
    END WHILE;
    
  • repeat

    相当于 do while

    REPEAT
     ....
     UNTIL 条件
    END  REPEAT;
    
  • loop

    • LEAVE 相当于BREAK;

    • ITERATE 相当于continue

    • [begin_lable:] LOOP
       ....
       END LOOP [end_label];
       -- LEAVE label; 
       -- iterate label;
      
      • 简单累加

        begin
         declare a int default 0;
         sum:loop
          if a<=0 then leave sum; end if;
          ....
         end loop sum;
         
        end;
        

游标

  • Q:啥是游标

    • A:存储查询结果
  • 游标声明

    DECLARE 游标名称 CURSOR FOR 查询语句;
    
  • 打开游标

    OPEN 游标名称;
    
  • 获取游标记录

    • FETCH 游标名称 INTO 变量[,变量];
      
  • 关闭

    CLOSE 游标名称;
    
    • 解决读取死循环

      decleare exit handler for SQLSTATE '02000' close 游标名称
      

存储函数

CREATE FUNCTION 存储函数名称([参数列表]) 
RETURN type [characteristic]
begin
...
return 值/sql
end
--  chararcteristic
 -- DETERMINSTIC:相同输入参数产生相同的结果
 -- no sql:不包含SQL
 -- READS SQL DATA: 包含读取数据 其他非法

触发器

  • 简介:

    • 在增删改 操作之后,触发并执行触发器中定义SQL语句的集合
  • 触发器类型

    • insert触发器
      • NEW 表示将要活着已经新增的数据
    • UPDATE触发器
      • OLD 表示修改之前,NEW表示修改之后
    • DELETE触发器
      • OLD表示将要活着已经删除的数据
  • 创建触发器

    CREATE TRIGGER 触发器名称 BEFOR/AFTER INSERT/UPDATE/DELETE ON 表名 FOR EACH ROW
    BEGIN
     ...
    END;
    
  • 查看

    SHOW TRIGGERS;
    
  • 删除

    DROP [数据库名.]TRIGGER 触发器名称 -- 若未指定则默认删除当前数据库的
    

–自增:auto_increment

  • 例子

    CREATE TRIGGER insert_debug BEFOR/AFTER INSERT ON datas FOR EACH ROW
    BEGIN
      insert into inser_log values(null,new.字段1,new.字段2..)
    END;
    
    • concat(字符串1,字符串2,…)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值