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 ;
我正在尝试在 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 ;