MYSQL触发器更新后给我这个错误



更新用户后,我收到此错误

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

错误是什么

如果希望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;

相关内容

  • 没有找到相关文章

最新更新