更新后的 MYSQL TRIGGER 给我这个错误

时间:2021-01-04 14:53:03

标签: mysql sql database triggers

更新用户后出现此错误

<块引用>

ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG: Can't update table 'users' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

这是我的触发器,我想在他的声望低于0时删除用户

CREATE TRIGGER check_fame AFTER UPDATE ON users FOR EACH ROW
  BEGIN
  IF NEW.fame < 0 THEN
    DELETE FROM users WHERE login = OLD.login;
  END IF;
END

错误是什么?

1 个答案:

答案 0 :(得分:0)

如果您希望 fame 始终为正数,请使用 check 约束:

ALTER TABLE users ADD CONSTRAINT chk_users_fame CHECK (fame >= 0);

在较新版本的 MySQL 中,此操作不需要触发器。

在旧版本中,您可以使用触发器,但要防止 update

CREATE TRIGGER check_fame BEFORE UPDATE ON users FOR EACH ROW
BEGIN
  IF NEW.fame < 0 THEN
     SIGNAL SQLSTATE '45000'
       SET MESSAGE_TEXT = 'Fame must never be negative';
  END IF;
END;