MySQL触发器检查行字段是否存在

时间:2017-05-26 00:54:01

标签: mysql sql triggers mariadb

我在表上创建了一个触发器,如下所示:

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;

1 个答案:

答案 0 :(得分:1)

该错误与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$$

THENEND IF之间没有任何内容无效。我们必须有一些东西。 MySQL容忍空BEGIN END;块,因此我们可以将其用作无操作。

目前尚不清楚您的目标是什么。