mysql - SQL触发器查询错误

标签 mysql sql triggers

更新:

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 行 '' 附近使用的正确语法。

最佳答案

根据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;

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

关于mysql - SQL触发器查询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9852063/

相关文章:

php - 无法在 PHP 中创建查询变量作为表名的 SQL 表

php - Bash echo-pipe 进入 Mysql shell 失败

mysql - 如何将 sql 查询/查询的结果用于另一个选择查询?

PHP/MYSQL 仅更新具有定义值的第一行

mysql - 创建允许的最大值触发器

mysql - 选择不包含特定内容字段的 ID

sql - 在 SQL 中,只有当没有 child 满足条件时才带主人

python - 将每个单引号/双引号替换为\' or\"

javascript - 制作从 html 到 ifttt 的触发器

javascript - 如何在按键时触发动画