【问题标题】:IF...THEN statement in mysql triggermysql 触发器中的 IF...THEN 语句
【发布时间】:2012-04-13 03:33:48
【问题描述】:

我有两张桌子:

table A
 id | level_ID | col_m | col_n

table B
 id | prev_ID | cur_ID

table A 是从应用层进行操作的,在该层中完成了新的插入和更新。另一方面,table B 通过触发器仅在 table Alevel_ID 列上插入值:

DELIMITER |
DROP TRIGGER IF EXISTS trigger_happy|
CREATE TRIGGER trigger_happy AFTER UPDATE ON table A
FOR EACH ROW
  BEGIN
    IF level_ID!=NEW.level_ID THEN
    INSERT INTO table B (id, cur_ID, prev_ID)
    VALUES (OLD.id, NEW.level_ID, OLD.level_ID)
  END IF;
END;
DELIMITER ;

问题是我打算只在level_ID 列发生变化时触发触发器。其他列 col_mcol_n 的更新不应触发触发器。

帮我处理一下我的触发器语句,因为它不能按原样工作。

编辑

更新列在应用程序逻辑中的不同时间完成。只有在level_ID 上的更新完成时,我才需要触发触发器。

【问题讨论】:

    标签: sql triggers mysql5


    【解决方案1】:

    很简单,您需要运行两次更新。

    一次更新将需要 level_ID 列上的触发器。第二次更新将更新 col_m 和 col_n 列,而没有关联的触发器。

    【讨论】:

      【解决方案2】:

      我发现对我有用的解决方案如下:

      DELIMITER |
      DROP TRIGGER IF EXISTS trigger_happy|
      CREATE TRIGGER trigger_happy AFTER UPDATE ON table A
      FOR EACH ROW
        BEGIN
          IF NEW.level_ID!=OLD.level_ID THEN /* edit conditional statement */
          INSERT INTO table B (id, cur_ID, prev_ID)
          VALUES (OLD.id, NEW.level_ID, OLD.level_ID)
        END IF;
      END;
      | /* add delimiter */
      DELIMITER ;
      

      此触发器将仅比较列 level_ID 上的更改并在更新后触发。当我使用 phpmyadmin 时,我必须将分隔符指定为 |。我把它留在默认的;

      我希望这对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-12
        • 1970-01-01
        • 2013-01-28
        • 2012-05-09
        • 2015-08-20
        • 2021-10-20
        • 1970-01-01
        • 2020-09-22
        相关资源
        最近更新 更多