是否可以将新表和旧表从触发器传递到MySQL中的过程中?

是否可以将新表和旧表从触发器传递到MySQL中的过程中?,mysql,triggers,Mysql,Triggers,是否可以将新表和旧表从触发器传递到MySQL中的过程中? 我怀疑没有,因为不存在过程接受的表这样的数据类型。 有可能的解决办法吗 理想情况下,它将如下所示: CREATE TRIGGER Product_log AFTER UPDATE ON Product FOR EACH ROW BEGIN call logChanges(OLD, NEW); END; BEGIN IF OLD.customer_name != NEW.customer_name THEN

是否可以将新表和旧表从触发器传递到MySQL中的过程中? 我怀疑没有,因为不存在过程接受的表这样的数据类型。 有可能的解决办法吗

理想情况下,它将如下所示:

CREATE TRIGGER Product_log AFTER UPDATE ON Product
  FOR EACH ROW BEGIN
    call logChanges(OLD, NEW);
  END;
BEGIN
    IF OLD.customer_name != NEW.customer_name
    THEN
            INSERT INTO myTable_chagne_history
                (
                    customer_id    ,
                    customer_name  ,
                    another_field  ,
                    edit_time
                )
                VALUES
                (
                    OLD.customer_id,
                    OLD.customer_name,
                    OLD.another_field  ,
                    NEW.time_edit_was_made
                );
    END IF;
END;

这是不可能的,因为没有新的或旧的桌子。整个触发器与表相关,“新”和“旧”是指在触发事件之前和之后包含的行及其值。换句话说,你的例子是:

call logChanges(OLD.customername, NEW.customername)
您还可以将所有旧数据保存在历史表中(我希望logchanges会这样做),基本上是生产表的克隆,如下所示:

CREATE TRIGGER Product_log AFTER UPDATE ON Product
  FOR EACH ROW BEGIN
    call logChanges(OLD, NEW);
  END;
BEGIN
    IF OLD.customer_name != NEW.customer_name
    THEN
            INSERT INTO myTable_chagne_history
                (
                    customer_id    ,
                    customer_name  ,
                    another_field  ,
                    edit_time
                )
                VALUES
                (
                    OLD.customer_id,
                    OLD.customer_name,
                    OLD.another_field  ,
                    NEW.time_edit_was_made
                );
    END IF;
END;

可以显式传递每个字段:

CALL logChanges(OLD.colA, OLD.colB, NEW.colA, NEW.colB);
或者,如果
logChanges
必须具有足够的通用性,以处理来自不同表的此类调用,则可以使用合适的分隔符将字段值连接成单个字符串(例如:


或者,如果必须保留数据类型,可以将记录插入一个临时文件中,
logChanges
从中读取。

我也有同样的问题/要求。你有没有找到工作(可能效率很高?)