书山小站

记录我的程序人生

[SQL]存储器与触发器

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;
       
    
    
    
    ### 游标
  • Q:啥是游标

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

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

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

  • 关闭

    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,...)

发表评论

电子邮件地址不会被公开。 必填项已用*标注