我在表上创建了一个触发器,如下所示:
delimiter //
CREATE TRIGGER tb_ins BEFORE UPDATE ON tb
FOR EACH ROW
BEGIN
IF (NEW.size <> size) THEN
END IF;
END;//
问题是,单独更新 size
以外的任何字段都会给我一个错误,提示找不到这样的字段。
例如:
UPDATE tb SET color = 'red' WHERE id = 1;
给我一个没有找到字段的错误,因为更新不包含触发器需要的 size
字段。
我需要知道是否有办法检查我的触发器函数中是否存在特定的 ROW
字段。如何实现?
我需要等同于:
IF EXISTS(ROW.size) THEN
END IF;
最佳答案
错误与 UPDATE 语句中引用的列无关。
最大的问题是触发器主体中对 size
的不合格引用。如果目的是检测分配给 size
的值的变化,我们应该将 NEW.size
的值与 OLD.size
进行比较.
DELIMITER $$
DROP TRIGGER IF EXISTS tb_ins $$
CREATE TRIGGER tb_ins
BEFORE UPDATE ON tb
FOR EACH ROW
BEGIN
IF NOT (NEW.size <=> OLD.size) THEN
-- value of size column has been modified
BEGIN END;
END IF;
END$$
THEN
和 END IF
之间没有任何内容是无效的。我们必须在那里有一些东西。 MySQL 容忍一个空的 BEGIN
END;
block ,因此我们可以将其用作空操作。
目前尚不清楚您要实现的目标。
关于MySQL触发器检查行字段是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44191940/