我有以下 MySQL 触发器
SET @iUserId = OLD.LastChangedBy;
IF NOT NEW.LastChangedBy <=> OLD.LastChangedBy THEN
SET @iUserId = NEW.LastChangedBy;
END IF;
IF NOT NEW.BookingId<=> OLD.BookingId THEN
INSERT INTO AuditTrail VALUES (UUID(),@iUserId,'UPDATE','Booking', OLD.BookingId,'BookingType ',OLD.BookingType ,NEW.BookingType ,NOW());
END IF;
这称为创建触发器 Booking_AUPD
AFTER UPDATE ON Booking FOR EACH ROW
我遇到的问题是如何在 AFTER UPDATE 触发器中获取旧字段值?
最佳答案
在 UPDATE TRIGGER
中,您可以使用 OLD
关键字来访问被更新替换的行数据。 NEW
关键字允许访问传入的行数据,如果成功,这些数据将替换旧行。
UPDATE
触发器的示例是:
CREATE TRIGGER upd_check AFTER UPDATE ON SomeTable
FOR EACH ROW
BEGIN
IF (OLD.LastChangedBy <> NEW.LastChangedBy) THEN
INSERT INTO AuditSomeTable(ID, LastChangedBy)
VALUES (OLD.ID, OLD.LastChangedBy);
END IF;
END;
根据创建的触发器类型,OLD
和 NEW
行可能对您不可用:
插入触发器
- 仅访问
NEW
伪行。
更新触发器
- 访问
NEW
和OLD
伪行
删除触发器
- 仅访问
OLD
伪行
即INSERT
触发器上没有 OLD
行,DELETE
触发器上没有NEW
行。
OP 的问题
OP 没有提供实际代码,以及评论中提到的错误消息:
There is no OLD row in on INSERT trigger
表示 OP 无意中创建了一个 INSERT TRIGGER
而不是问题中指出的 UPDATE TRIGGER
。 INSERT
触发器没有 OLD
伪表。
关于mysql - 在更新语句后获取 MySQL 触发器中的旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17681308/