我有两个表:
table A
id | level_ID | col_m | col_n
table B
id | prev_ID | cur_ID
CCD_ 1是从执行新插入以及更新的应用层操作的。另一方面,table B
具有经由触发器仅在table A
的level_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_m
和col_n
上的更新不应触发触发器。
帮助我的触发器语句,因为它不能正常工作。
编辑
列的更新在应用程序逻辑中的不同时间进行。只有当level_ID
更新完成时,我才需要触发。
非常简单,您将需要运行两个更新。
一个更新将需要level_ID列上的触发器。第二次更新将在没有关联触发器的情况下更新col_m和col_n列。
我找到的适合我的解决方案如下:
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,所以我必须将分隔符指定为table A
0。我把它留在默认的;
我希望这能帮助到别人。