【问题标题】:MYSQL Trigger Update Copy Entire RowMYSQL 触发器更新复制整行
【发布时间】:2012-07-25 03:53:31
【问题描述】:

我正在尝试创建一个触发器,以便在任何 UPDATE 上将整行复制到审计表中。

我有两张桌子

FrequenciesFrequencies_Audit

这是我的触发器。

create trigger auditlog 
before update on frequencies
for each row insert into
frequencies_audit select frequencies.*;

当我更新记录时,我得到未知表frequencies

如果可能,我不想单独输入每个字段名称,因为我们不断在数据库中添加列。

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    而不是BEFORE UPDATE,你可以写AFTER UPDATE触发器如下::

    DELIMITER //
    CREATE TRIGGER auditlog AFTER UPDATE ON frequencies
    FOR EACH ROW BEGIN  
        INSERT INTO frequencies_audit select * from frequencies where freqId = NEW.freqId;
    END;//
    DELIMITER ;
    

    freqId 只是 Id 列的名称。将其替换为频率表中 Id 列的名称。

    【讨论】:

    • 注意,如果在触发器上使用BEGIN ... END 语法,则必须覆盖分隔符
    【解决方案2】:

    你可以试试这个

    create trigger auditlog 
    AFTER UPDATE on frequencies
    for each row insert into
    frequencies_audit select * from frequencies;
    

    因为在MYSQL中如果你写select TableName.*那么它总是返回一个错误Unknown table TableName

    也许对你有帮助。

    【讨论】:

    • 我在“字段列表”中得到未知列“频率”
    • 不,如果两个表结构相同,则不可能。请检查表结构。
    • 表结构相同。我做了一份没有记录的表格。
    • 我制作了这个触发器,它的工作正常 DROP TRIGGER IF EXISTS auditlog// CREATE TRIGGER auditlog BEFORE UPDATE ON questions FOR EACH ROW insert into questions_old select * from questions //跨度>
    • 只需在我的示例代码中替换你的表名,然后执行它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    相关资源
    最近更新 更多