MySQL 更新后触发,否则插入

MySQL Trigger AFTER UPDATE IF ELSE insert

我正在尝试在 equipcheckedOutBy 更新后将触发器 插入 a table =21=] table.

它在第 7、10 行和其他行给了我一个 Error 1064,因为我随机更改了一些东西,希望它能以某种方式神奇地工作。

DELIMITER $$

CREATE TRIGGER moveToHistory AFTER UPDATE ON equip
FOR EACH ROW
BEGIN

IF NEW.checkedOutBy <> Old.checkedOutBy
BEGIN

IF OLD.checkedOutBy IS NOT NULL AND NEW.checkedOutBy IS NULL THEN
     INSERT INTO equipmentHistory(assetId, operation, createdBy, creationDate)
     VALUES(new.assetId, 'CheckIn', eid, Date(sysdate()))
     NEW.status = 'CheckedIn';
ELSE IF OLD.checkedOutBy IS NULL AND NEW.checkedOutBy IS NOT NULL THEN
     INSERT INTO equipmentHistory(assetId, operation, createdBy, creationDate)
     VALUES(new.assetId, 'Checkout', eid, Date(sysdate()))
     NEW.status = 'CheckedOut';
END IF
END
END$$

DELIMITER ;

这是 if - elseif

语法正确的触发器
DELIMITER $$
CREATE TRIGGER moveToHistory AFTER UPDATE ON equip
FOR EACH ROW
BEGIN
IF NEW.checkedOutBy <> Old.checkedOutBy then
   IF OLD.checkedOutBy IS NOT NULL AND NEW.checkedOutBy IS NULL THEN
      INSERT INTO equipmentHistory(assetId, operation, createdBy, creationDate)
      VALUES(new.assetId, 'CheckIn', eid, curdate());
   ELSEIF OLD.checkedOutBy IS NULL AND NEW.checkedOutBy IS NOT NULL THEN
      INSERT INTO equipmentHistory(assetId, operation, createdBy, creationDate)
       VALUES(new.assetId, 'Checkout', eid, curdate());
   END IF;
END IF ;
END;$$

DELIMITER ;

另请注意,我已删除 NEW.status = 'CheckedIn';NEW.status = 'CheckedOut'; ,当您尝试使用 after update 触发器

进行设置时,这些没有任何意义

请试试这个

 DELIMITER //

CREATE TRIGGER moveToHistory AFTER UPDATE ON equip
FOR EACH ROW
BEGIN

IF NEW.checkedOutBy != Old.checkedOutBy
BEGIN

IF OLD.checkedOutBy IS NOT NULL AND NEW.checkedOutBy IS NULL THEN
     INSERT INTO equipmentHistory(assetId, operation, createdBy,creationDate)
     VALUES(new.assetId, 'CheckIn', eid, Date(sysdate()))
 NEW.status = 'CheckedIn';
ELSE IF OLD.checkedOutBy IS NULL AND NEW.checkedOutBy IS NOT NULL THEN
 INSERT INTO equipmentHistory(assetId, operation, createdBy, creationDate)
 VALUES(new.assetId, 'Checkout', eid, Date(sysdate()))
 NEW.status = 'CheckedOut';
END IF
END
END
//
DELIMITER ;