3

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

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

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

4

1 回答 1

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;
...
于 2012-11-22T13:08:17.790 回答