mysql - 如何使用 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中扣除,否则从年假中扣除
解决方案
我认为这更像是你想要的。
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 ;
如果没有,那么将数据作为问题中的文本进行采样会有所帮助。
推荐阅读
- python - 使用 chromedriver 从 Selenium 打印 PDF
- javascript - 如何解决模拟函数中的 Promise?
- java - 响应不是来自使用改造 2 的服务器
- c# - 如何通过将文件从 HttpPostedFileBase 复制到 MemoryStream 来将文件附加到电子邮件?
- owasp - 使用授权标头扫描 API
- sql - 在 case 语句中计算 % 不能正常工作
- python - 将数学应用于熊猫中行具有相同值的列
- autodesk-forge - 如何显示与文件中所有问题相对应的问题 ID?
- javascript - 简化 Javascript 中的 if 语句
- javascript - 跟踪脚本的返回值