【问题标题】:MYSQL TRIGGER AFTER UPDATE give me this errorMYSQL TRIGGER AFTER UPDATE 给我这个错误
【发布时间】:2021-04-10 08:47:50
【问题描述】:

更新用户后出现此错误

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

错误是什么?

【问题讨论】:

  • 样本数据、所需结果以及对您要实现的逻辑的解释会有所帮助。也就是说,错误消息似乎很清楚。

标签: mysql sql database triggers


【解决方案1】:

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

【讨论】:

  • 不,我不想保持名气> 0,但我想删除他的名气成为的用户
  • @bad-ass_1337 。 . .只需使用视图选择成名非负数的行。
猜你喜欢
  • 1970-01-01
  • 2011-10-18
  • 2014-09-24
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 2015-01-20
相关资源
最近更新 更多