【问题标题】:how to fix mysql trigger with if else statement?如何使用 if else 语句修复 mysql 触发器?
【发布时间】:2019-06-12 10:57:52
【问题描述】:

我有表 up_files 和 fgusers3。 在 up_files 上插入后,触发器应该更新 fgusers3。

up_file: id,uname, days,d_leave
fgusers3: id,name,AnualLeave,cf

我尝试不使用 if else 语句并且工作正常。每次用户插入数据时,触发器都会更新 fgusers3 表中的 AnualLeave 行和 cf 行。

DROP TRIGGER IF EXISTS `after_insert`;
CREATE DEFINER=`root`@`localhost` 
TRIGGER `after_EL` BEFORE INSERT ON `up_files` 
FOR EACH ROW 
UPDATE fgusers3 
SET fgusers3.AnualLeave = fgusers3.AnualLeave - NEW.days + fgusers3.cf,fgusers3.cf = 0 
WHERE fgusers3.name = NEW.uname AND NEW.d_leave = 'Emergency Leave'

在我添加 if else 语句后,我有错误。请帮助我是 mysql 触发器的新手:

DELIMITER #
CREATE TRIGGER `after_insert` BEFORE INSERT ON `up_files` FOR EACH ROW 
BEGIN

UPDATE fgusers3 
IF(fgusers3.cf < NEW.days ) THEN
         SET fgusers3.AnualLeave = fgusers3.AnualLeave - NEW.days +fgusers3.cf,fgusers3.cf = 0
       WHERE fgusers3.name = NEW.uname AND NEW.d_leave = 'Emergency Leave' ;

       ELSE
       SET fgusers3.cf = fgusers3.cf - NEW.days
       WHERE fgusers3.name = NEW.uname AND NEW.d_leave = 'Emergency Leave' ;
       END IF ;
END#
DELIMITER ; 

解释
如果用户插入“紧急休假”,我会尝试将天数扣除年假或从去年结转(cf)(如果有)。 如果 cf available 比 day 足够,那么将从 cf 中扣除, 否则从年假中扣除

【问题讨论】:

  • 我在您的第二个陈述中没有看到其他内容?
  • 你说你有一个错误是什么?
  • 如果 (fgusers3.cf
  • 您的第一个查询由一个语句组成,因此您可以不设置分隔符并使用 begin..end 块您的第二个查询由 2 个语句组成,因此您必须设置分隔符并使用开始。 .结束块。请查看dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html
  • 您需要在WHERE 子句末尾的END IF 之前添加一个;

标签: mysql triggers


【解决方案1】:

我觉得这更像你想要的。

DELIMITER $$ 
CREATE TRIGGER test_trig BEFORE INSERT ON up_files 
FOR EACH ROW 
bEGIN   
    IF(fgusers3.cf < NEW.days ) THEN
    UPDATE fgusers3 
        SET fgusers3.AnualLeave = fgusers3.AnualLeave - NEW.days +fgusers3.cf,fgusers3.cf = 0 
        WHERE fgusers3.name = NEW.uname AND NEW.d_leave = 'Emergency Leave' ; 
    ELSE 
    UPDATE fgusers3
        SET fgusers3.cf = fgusers3.cf - NEW.days 
        WHERE fgusers3.name = NEW.uname AND NEW.d_leave = 'Emergency Leave' ; 
    END if;
end $$

delimiter ; 

如果没有,那么将数据作为问题中的文本进行采样会有所帮助。

【讨论】:

  • 它工作。但是当我尝试插入值时。#1109 - 字段列表中的未知表'fgusers3'。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
相关资源
最近更新 更多