0

我有两张桌子:

table A
 id | level_ID | col_m | col_n

table B
 id | prev_ID | cur_ID

table A从完成新插入和更新的应用程序层进行操作。另一方面,仅在通过触发器的列table B更新后插入值:level_IDtable 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

4

2 回答 2

0

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

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

于 2012-03-29T14:09:08.650 回答
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 时,我必须将分隔符指定为|. 我将其保留为默认值;

我希望这可以帮助别人。

于 2012-03-31T07:14:45.987 回答