IF ...在mysql触发器中的THEN语句

时间:2012-03-29 13:20:52

标签: sql triggers mysql5

我有两张桌子:

table A
 id | level_ID | col_m | col_n

table B
 id | prev_ID | cur_ID

table A从应用程序层进行操作,在该应用程序层中完成新插入并进行更新。另一方面,table B通过触发器仅在level_ID table A列的更新后插入值:

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更新完成后才触发触发器。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我发现为我工作的解决方案如下:

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时,我必须将分隔符指定为|。我将其保留为默认;

我希望这有助于某人。