Phpmyadmin 中的更新触发器之前如何获取更新的值

Posted

技术标签:

【中文标题】Phpmyadmin 中的更新触发器之前如何获取更新的值【英文标题】:Before Update Trigger in Phpmyadmin how to get updated values 【发布时间】:2019-08-16 03:49:05 【问题描述】:

我试图在 phpmyadmin 中获得一个触发器,该触发器将在更新特定表之前和之后创建具有特定列值 (reputation) 的审计。

类似:

CREATE DEFINER=`test`@`%`
TRIGGER `monitor update reputation`
BEFORE UPDATE ON `game_resorts`
FOR EACH ROW
INSERT INTO `audit` (`id`, `datetime`, `id_resort`, `reputation`)
VALUES (NULL, CURRENT_TIMESTAMP, id_resort, reputation)

主要问题是如何检索将要更新的id_resort;然后是reputation 值?

【问题讨论】:

【参考方案1】:

mysql 中,您将使用 NEW 关键字,所以我假设使用 phpmyadmin 也是如此。

例如:

CREATE DEFINER=`test`@`%`
TRIGGER `monitor_update_reputation` //don't use spaces in a trigger name
BEFORE UPDATE ON `game_resorts`
FOR EACH ROW
INSERT INTO `audit` (`datetime`, `id_resort`, `reputation`) 
VALUES (CURRENT_TIMESTAMP, NEW.id_resort, NEW.reputation)

如果您想在更新之前获得id_resortreputation 的值,可以使用OLD 关键字:

...
VALUES (CURRENT_TIMESTAMP, OLD.id_resort, OLD.reputation)

另外,我认为您不能将NULL 插入主键列。如果audit 表上的id 设置为自动递增,您可以简单地从INSERT 语句中省略id 列。

【讨论】:

以上是关于Phpmyadmin 中的更新触发器之前如何获取更新的值的主要内容,如果未能解决你的问题,请参考以下文章

phPmyAdmin,如何创建一个触发器,当有人更新一行中的任何列时,它将在特定列中添加一个“1”

PHPMyAdmin 更新触发错误

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

Phpmyadmin+codeigniter 如何自动更新我的数据?

如何处理触发器中的碰撞问题?

如何通过 phpmyadmin 创建触发器?