首页 > 解决方案 > 如何使用 if else 语句修复 mysql 触发器?

问题描述

我有表 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中扣除,否则从年假中扣除

标签: mysqltriggers

解决方案


我认为这更像是你想要的。

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 ; 

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


推荐阅读