当前位置: 首页 > 面试题库 >

获取当前更新的列名以在触发器中使用

赫连飞沉
2023-03-14
问题内容

有没有一种方法实际上可以获取已更新的列名,以便在触发器中使用它?

基本上,我试图在用户插入或更新表时进行审核跟踪(在这种情况下,它与Contact表有关)

CREATE TRIGGER `after_update_contact`
    AFTER UPDATE ON `contact` FOR EACH ROW
    BEGIN
        INSERT INTO user_audit (id_user, even_date, table_name, record_id, field_name, old_value, new_value)
        VALUES (NEW.updatedby, NEW.lastUpdate, 'contact', NEW.id_contact, [...])
    END

如何获取已更新的列的名称,并从中获取该列的OLDNEW值。如果一行中甚至多行中更新了多列,是否可以对每次更新进行审核?


问题答案:

只需对每列使用OLD.colname <> NEW.colname即可检查并查找不同的列。触发器在MySQL中的使用受到一些限制,这太糟糕了。



 类似资料:
  • userNotesTable: 用户提醒表: 插入触发器: 更新触发器: 这是数据库的当前代码,以及提醒表的特定触发器。我遇到的困难是,从提醒表中的specific中的user notes表中选择特定的名称和额外的内容,所有这些都在更新触发器中。 插入时,和会被插入到提醒和搜索表中,但我希望能够使用特定名称和用户注释表中的额外内容更新搜索表,这可能吗?

  • 问题内容: 我有两个叫和的表。我想创建一个触发器,更新列上在每个新的插入表的表。 表客户:customer_id,名称,last_sale,… 表销售额:sale_id,customer_id,日期,… 我已经开始写作,但我不知道该怎么做。 有人可以帮我吗? 问题答案: 然后 是即将在销售表中插入的行。(对于更新行,将取决于该行在更新之后的外观,以及该行在更新之前的外观)。

  • 问题内容: 如何在SQL触发器中获取更新的记录的值-像这样: 显然这是行不通的,但是您可以看到我要尝试的内容。 问题答案: 如果您 确定 只会更新一个值,则可以执行此操作… 如果可以一次更新多个值,则此代码将仅处理其中一个。(尽管不会出错。) 您可以使用游标,或者如果它是SQL Server 2008+,则可以使用表变量。 或者,更常见的是,只需将StoredProcedure代码移到触发器中。

  • 问题内容: 我有一个postgres数据库,其中包含几个要监视其更新的表,并且如果有任何更新,则要触发“嘿,某些更改”更新。这在基本情况下有效,但是现在是时候进行改进了。 效果很好。我将其附着在桌子上,如下所示: (作为一个附带的问题:如果有比触发函数中的mess’o’$$更好/更容易的方法来对触发结果进行json.stringify的字符串化,请让我知道。平衡引号并不有趣)。 我要执行的操作是将

  • 问题内容: 在oracle中,我可以指定列,这将引发触发器的触发: 现在,我想执行以下操作:当 只 更新 一 列时,我不希望触发触发器。这怎么可能? 我可以列出除那一列之外的所有列,该列不应引起触发器的触发。对于具有许多列的表而言,这非常麻烦。 另一种方法是使用像这样的UPDATING函数: 但是,如果我立即更改了COL1 和 COL3,则该语句的计算结果为false。那不是我想要的,因为我只想更

  • 问题内容: 我使用触发器来插入行,并希望使用上一个创建的ID供后续查询使用。 我该怎么办? 代码如下: 问题答案: 您是否看过LAST_INSERT_ID()?但要注意: 如果使用单个INSERT语句插入多行,则LAST_INSERT_ID()仅返回为第一个插入行生成的值。