【发布时间】:2013-07-14 21:57:59
【问题描述】:
我有以下 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;
这被称为 CREATE TRIGGER Booking_AUPD 更新后预订每一行
我遇到的问题是如何在 AFTER UPDATE 触发器中获取 OLD 字段值?
【问题讨论】:
-
不清楚你在问什么。要引用 UPDATE 之前的列值,请在 AFTER UPDATE 触发器中引用
OLD.col_name,就像您的示例代码对OLD.LastChangedBy、OLD.BookingID等的引用所做的那样。跨度> -
是的。我更新了字段 BookingType,我需要在 AFTER UPDATE 触发器中获取 BookingType 的 OLD 值。这可能吗?
-
是的,触发器主体中对
OLD.BookingType的引用将返回行的BookingType列的值,就像执行更新语句之前一样。该引用位于 INSERT 语句的 values 子句中。 (我仍然不能理解你在问什么。我们注意到只有在 BookingId 列的 NEW 和 OLD 值不同时才会执行 INSERT。) -
是的,这就是我尝试过的,但是在应用触发器时,我得到“INSERT 触发器上没有 OLD 行”
-
如果您提供返回的实际错误消息,并在问题中提供,这将大大有助于消除歧义并帮助您获得问题的答案。