我在表上创建了一个触发器,如下所示:
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;
答案 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$$
THEN
和END IF
之间没有任何内容无效。我们必须有一些东西。 MySQL容忍空BEGIN
END;
块,因此我们可以将其用作无操作。
目前尚不清楚您的目标是什么。