带有字段名称的MySql AF​​TER UPDATE触发器

brp*_*yne 6 mysql triggers

我有两张表格如下.当在"开关"上更新字段时,我需要在"switch_updates"中插入一个条目,其中包括更新字段的名称,旧值和新值.

我已经包含了我已经开始的触发器,但是我无法弄清楚如何拉出已更新的字段的名称.

---------------------
|  switches         |
---------------------
|  id               |
|  name (varchar)   |
|  functional (int) |
---------------------


-----------------------------
|  switch_updates           |
-----------------------------
|  id                       |
|  field_name (varchar)     |
|  field_original (varchar) |
|  field_new (varchar)      |
-----------------------------
Run Code Online (Sandbox Code Playgroud)

触发

CREATE TRIGGER SwitchUpdate_Trigger
AFTER UPDATE ON switches
FOR EACH ROW
BEGIN
    INSERT into switch_updates (id, switch_id, field_name, field_original, field_new)
    VALUES 
        (
            null,
            NEW.id, -- switch_id
                  , -- field_name?
            OLD.field_value, --?
            NEW.field_value, --?
        );
END;
Run Code Online (Sandbox Code Playgroud)

per*_*ssf 3

创建触发器文档

您可以使用别名 OLD 和 NEW 来引用主题表(与触发器关联的表)中的列。OLD.col_name 指更新或删除之前现有行的列。NEW.col_name 指的是要插入的新行或更新后的现有行的列。

来自一个有趣的博客

在 INSERT 触发器中,只能使用 NEW.col_name,因为没有旧行。在 DELETE 触发器中,只能使用 OLD.col_name,因为没有新行。在 UPDATE 触发器中,您可以使用 OLD.col_name 来引用行中更新前的列,使用 NEW.col_name 来引用行中更新后的列。

这意味着您应该能够完成您的任务。