更新用户后,我收到此错误
更新用户后,我收到此错误
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;