mysql 触发器中的 IF...THEN 语句
Posted
技术标签:
【中文标题】mysql 触发器中的 IF...THEN 语句【英文标题】:IF...THEN statement in mysql trigger 【发布时间】: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 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
上的更新完成时,我才需要触发触发器。
【问题讨论】:
【参考方案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 时,我必须将分隔符指定为 |
。我把它留在默认的;
我希望这对某人有所帮助。
【讨论】:
以上是关于mysql 触发器中的 IF...THEN 语句的主要内容,如果未能解决你的问题,请参考以下文章
Bash / Dash:在“If then else”语句中的“fi”上杀死进程?
if then elseif then else then - Angular 4 中的语句