【问题标题】:Not able to create a trigger with if condition in MySql 5.5.27无法在 MySql 5.5.27 中使用 if 条件创建触发器
【发布时间】:2015-04-19 17:06:18
【问题描述】:

假设我有两个表 A 和 B。

表 A 有 4 列:id、name、age、status
*状态可能只有活动和非活动 表B有:id、age、changedOn、idOfA

我想在表 A 中编写一个更新触发器,它只会 当表 A 的更新行状态为“非活动”时工作。

我曾尝试编写这样的触发器:

CREATE DEFINER = `root`@`localhost` TRIGGER `before_A_update` 
BEFORE UPDATE ON `A` FOR EACH ROW
IF New.status = 'inactive' THEN
UPDATE B
SET age= (NEW.age + 10),
changedOn = NOW()
WHERE idOfA= NEW.id
END IF;
END;

但它向我显示了一个错误并且没有创建触发器。

【问题讨论】:

  • 不清楚。你要什么?我看不出问题。
  • 请添加任何错误并用您所拥有的内容明确问题。如果可以的话,也许包括预期的结果和例子。这将帮助人们回答您的问题。

标签: mysql


【解决方案1】:

两件事,你需要一个分隔符开头,还缺少begin子句,它应该是

delimiter //
CREATE DEFINER = `root`@`localhost` 
TRIGGER `before_A_update` before UPDATE ON `A` 
FOR EACH ROW
BEGIN
 IF New.status = 'inactive' THEN 
  UPDATE B
  SET age= (NEW.age + 10),
  changedOn = NOW()
  WHERE idOfA= NEW.id
 END IF;
END;//

delimiter ;

【讨论】:

  • 但它仍然无法正常工作。我正在使用 MySql 触发器窗口来创建触发器。
  • 如果您使用的是 phpmyadmin 之类的 3rd 方应用程序,则需要在此处选择分隔符并从上述代码中删除分隔符块。所以不需要delimiter //,最后一行是end;,不需要delimiter ;
  • 你好,我也试过这种方式。但它也不起作用。我有点困惑为什么这个正常的东西不起作用。
猜你喜欢
  • 1970-01-01
  • 2016-01-22
  • 2013-12-12
  • 1970-01-01
  • 2016-08-13
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 2015-03-01
相关资源
最近更新 更多