我有一个包含3个字段的表,其中一个是“status”。 status是一个ENUM,可能包含'a','b'或'c'。
我需要找到一种方法来拒绝所有具有“status”=“b”的行的更新,甚至不允许root用户更新这些行。所以它就像把这行作为“最终”。 如果status = a或status = c,则应允许更新。
有没有办法做到这一点? 谢谢!
答案 0 :(得分:2)
您可以使用此触发器 -
DELIMITER $$
CREATE TRIGGER trigger1
BEFORE UPDATE
ON table1
FOR EACH ROW
BEGIN
IF OLD.status = 'b' THEN
SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'Cannot update value';
END IF;
END
$$
DELIMITER ;
如果你知道嘟嘟嘟嘟用户的祸根并希望允许他更新,那么你可以使用这个条件 -
...
IF CURRENT_USER() <> 'root@localhost' AND OLD.status = 'b' THEN
SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'Cannot update value';
END IF;
...