【问题标题】:Error in SQL trigger querySQL 触发器查询中的错误
【发布时间】:2012-03-24 13:18:32
【问题描述】:

更新:

DELIMITER $$
CREATE TRIGGER updateWage BEFORE UPDATE ON st_penalty
FOR EACH ROW BEGIN
  IF DAY({fw NOW( ) } ) = 1 THEN
     UPDATE st_penalty SET st_penalty.wage = (SELECT wage FROM staff WHERE staff.memId = st_penalty.memId);
  END IF;
END$$

错误是 #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在第 6 行的 '' 附近使用的正确语法。

【问题讨论】:

  • 尝试使用 day(NOW()) = 1 而不是 fwNOW()
  • 没有区别。错误出现在“#1064 - 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在 'WHEN (DAY(NOW()) =1) ON st_penalty FOR EACH 附近使用的正确语法ROW BEGIN UPDATE st_penalty SE' 在第 2 行"
  • 我看不出为什么触发器应该给出 #1064 错误?

标签: mysql sql triggers


【解决方案1】:

根据syntax,MySql 触发器中没有“WHEN”子句。此外,您还错过了 AFTER/BEFORE INSERT/UPDATE/DELETE 操作。

我会写你的触发器有点像这样(可能无法编译):

CREATE TRIGGER updateWage AFTER UPDATE OR INSERT ON st_penalty
FOR EACH ROW
BEGIN
    IF (DAY(NOW()) = 1)
       UPDATE st_penalty SET st_penalty.wage = (SELECT wage FROM staff WHERE staff.memId = st_penalty.memId) WHERE st_penalty.ID = new.ID
END;

新变量包含新添加/更新的行值。我建议您从上面的链接中阅读更多关于编写触发器的内容。

【讨论】:

  • 在END IF后面加分号:END IF;结束
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 2012-04-27
  • 2014-01-04
相关资源
最近更新 更多