【发布时间】:2018-05-16 14:31:50
【问题描述】:
我有一个包含许多列的表,我正在尝试实现一个触发器,该触发器在更新之前在特定列上工作,以确保该特定列的值只能根据一个特定的过渡,从 1 到 2 到 3。
例如,如果我的列中的值为 1,则如果尝试将其从 1 更改为 3,则对该列的更新将被拒绝,但如果它从 1 更改为 2,则该列的更新将被接受。
下面的代码有效,但是,它当前拒绝所有不符合该代码的更新。例如,如果我尝试更新该表中不同列的行,我的更新将被拒绝,即使我没有以任何方式更改值列。
DELIMITER //
CREATE TRIGGER transition BEFORE UPDATE ON tbl
FOR EACH ROW
BEGIN
IF (OLD.value = 1 AND NEW.value != 2)
OR (OLD.value = 2 AND NEW.value != 3)
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Incorrect transition of values';
END IF;
END //
DELIMITER;
如何解决此问题,以便在建立转换一致性的同时仍能更新其他列?
我正在使用 mariadb 5.5.50。
非常感谢!
【问题讨论】: