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.
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
错误是什么?
答案 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;