• mysql 触发器trigger


      年前有个需求要实现订单的实时统计,经组长提点知道了触发器这个概念。

      今天整理一下思路

      

    1. 基本语法:

      delimiter $$ -- 将分隔符设置为$$(避免sql代码中分隔符冲突)
      create trigger triggerName -- 创建触发器 (命名)
      after|before insert|update|delete ON tablename -- 触发条件 监控地点(表)
      for each row -- 监控内容 (每行)
      begin -- 开始触发逻辑
      -- logic code sql
      end$$ -- 触发逻辑结束
      delimiter ; -- 将分隔符改回;
    2. 个人例子:

      DELIMITER $$
      CREATE TRIGGER `cus_afterUpdate_place` after
      update ON `place_order` FOR EACH ROW
      BEGIN -- 监控order_status字段更新
      IF NEW.order_status <> OLD.order_status && new.order_status = 3 THEN
      INSERT INTO cus_statistics VALUES(new.create_bm,new.create_user,new.collect_bm,new.collect_site,1,new.insurance_price,curdate(),NOW()) ON DUPLICATE KEY UPDATE total_num=total_num + 1,insurance_price=insurance_price+new.insurance_price;
      -- 当有主键冲突 或 唯一索引冲突时 执行后面的 更新操作
      INSERT INTO gs_statistics VALUES(new.collect_bm,new.collect_site,1,new.insurance_price,curdate(),NOW()) ON DUPLICATE KEY UPDATE total_num=total_num + 1,insurance_price=insurance_price+new.insurance_price;
      -- 字段数值更新为 本身字段值+监控地点 新字段的值
      END IF;
      END$$
      DELIMITER ;
    3. 语法及注意点:

      1. 触发器不可以 查询/修改 自己当前这个被触发的表。(若触发器触发 a 表,那么不能有 select * from a 类似的操作)
      2. before | after
        1. before 监控数据库操作前触发,可用于更改即将入库(更新)的数据
        2. after 监控数据库操作之后触发,确保操作成功后,进入后续触发操作
        3. 定义 使用变量
          1. declare b int;
            select count(*) INTO @b from tab2;
            或者要写成
            set @b= (select count(*) from tab2 ) ;
        4. 条件语句
            1. if condition(条件) then
          逻辑操作语句
          else if condition(条件)
          逻辑操作语句
          else
          逻辑操作语句
          end if

    特别注意点:

    1、trigger 中不同意返回select出来的结果集
    2、欲想通过一个SELECT语句对多个变量赋值。请採用下面语句形式:SELECT id,name INTO @v1,@v2 FROM ...
    3、select
    into给变量赋值的语法不同意返回多行
    4、定义变量时用了@符号,以下引用时也要用上@符号
  • 相关阅读:
    Codeforces Round #370 (Div. 2) C. Memory and De-Evolution 水题
    Codeforces Round #370 (Div. 2) B. Memory and Trident 水题
    Codeforces Round #370 (Div. 2) A. Memory and Crow 水题
    Codeforces Round #258 (Div. 2) E. Devu and Flowers 容斥
    Codeforces Round #258 (Div. 2) D. Count Good Substrings 水题
    Codeforces Round #258 (Div. 2) C. Predict Outcome of the Game 水题
    Codeforces Round #258 (Div. 2) . Sort the Array 贪心
    Codeforces Round #258 (Div. 2) A. Game With Sticks 水题
    Codeforces Beta Round #14 (Div. 2) D. Two Paths 树形dp
    Codeforces Beta Round #14 (Div. 2) C. Four Segments 水题
  • 原文地址:https://www.cnblogs.com/wangfengzhu/p/9154223.html
Copyright © 2020-2023  润新知