phpMyAdmin中的MySQL触发器[关闭]

Posted

技术标签:

【中文标题】phpMyAdmin中的MySQL触发器[关闭]【英文标题】:MySQL trigger in phpMyAdmin [closed] 【发布时间】:2020-07-09 10:24:00 【问题描述】:

不明白,为什么这不起作用:C

DELIMITER $$

CREATE TRIGGER 'Reset Pass' BEFORE UPDATE ON authme
FOR EACH ROW
BEGIN
  IF OLD.`password` <> NEW.`password` THEN
    UPDATE authme SET `idVK` = '' WHERE `username` = NEW.`username`;
  END IF;
END$$

DELIMITER ;

请帮忙

【问题讨论】:

请显示任何错误信息 最好不要创建包含空格的名称 究竟是什么不工作?你有错误吗?错误的行为? 使用ResetPassReset_Pass 单引号用于引用字符串文字,而不是名称。使用反引号来引用触发器名称。 【参考方案1】:

首先:触发器名称不应该用单引号括起来;你需要反引号 - 或者更好的是,没有引号。

更深层次的问题是触发器无法操作它触发的表。您的触发代码可以编译,但运行时会报错:

错误:ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG:无法更新存储函数/触发器中的表“authme”,因为它已被调用此存储函数/触发器的语句使用。

我了解到您想在密码更改时清空 idVK 列。为此,您只需在伪表NEW 中设置其值:

DELIMITER $$

CREATE TRIGGER Reset_Pass BEFORE UPDATE ON authme
FOR EACH ROW
BEGIN
    IF OLD.`password` <> NEW.`password` THEN
        SET NEW.`idVK` = '';
    END IF;
END$$

DELIMITER ;

Demo on DB Fiddle - 一旦创建了上述触发器:

insert into authme(username, password, idVK) values ('foo', 'bar', 'baz');
update authme set password = 'newbar' where username = 'foo';
select * from authme;

| username | password | idVK |
| -------- | -------- | ---- |
| foo      | newbar   |      |

【讨论】:

太棒了!是工作。我明白了,我的错误在哪里。谢谢! :)

以上是关于phpMyAdmin中的MySQL触发器[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

phpmyAdmin 中的 MySQL 触发器错误

PHPMYADMIN 中的过程和触发器

phpMyAdmin中的慢查询但Mysql慢查询日志文件中没有[关闭]

Phpmyadmin 不接受 MySQL 触发器

使用 phpmyadmin 的 MySQL 触发器

无法在 PHPMYADMIN 上创建此 MYSQL 触发器