mysql:拒绝更新行

时间:2012-11-22 12:48:21

标签: mysql

我有一个包含3个字段的表,其中一个是“status”。 status是一个ENUM,可能包含'a','b'或'c'。

我需要找到一种方法来拒绝所有具有“status”=“b”的行的更新,甚至不允许root用户更新这些行。所以它就像把这行作为“最终”。 如果status = a或status = c,则应允许更新。

有没有办法做到这一点? 谢谢!

1 个答案:

答案 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;
...