我有一个包含 3 个字段的表,其中一个是“状态”。status 是一个 ENUM,内容可能为 'a'、'b' 或 'c'。
我需要找到一种方法来拒绝对具有“status”='b'的所有行的任何更新,甚至不应该允许root用户更新这些行。所以这就像让这一行“最终”。如果 status = a 或 status = c,则应允许更新。
有没有办法做到这一点?谢谢!
我有一个包含 3 个字段的表,其中一个是“状态”。status 是一个 ENUM,内容可能为 'a'、'b' 或 'c'。
我需要找到一种方法来拒绝对具有“status”='b'的所有行的任何更新,甚至不应该允许root用户更新这些行。所以这就像让这一行“最终”。如果 status = a 或 status = c,则应允许更新。
有没有办法做到这一点?谢谢!
您可以使用此触发器 -
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;
...