MySQL中

时间:2015-07-05 08:50:45

标签: mysql triggers audit-logging

我在MySQL的表Quantity中有一个列Inventory,它可以从多个来源更新。我需要在QuantityLog的最后更新时间以及执行此操作的源的另一列Quantity上维护表中的轨道。这样的内容应该是QuantityLog列的内容(文本类型)(只需要最新的更新详细信息):

 <Log>
     <UpdateTime>2015-02-23 12:00:01 PM</UpdateTime>
     <Source> Feeder application</Source>
 </Log>

如果只需要更新时间,我知道如何使用触发器。 然而,使用触发器方法是否还有其他机制来获取源并使用它?

请注意我尝试通过触发器执行此操作仅因为使用我的应用程序执行此操作的任何其他机制将要求我更改所有进行此更改的应用程序,我不倾向于这样做。

1 个答案:

答案 0 :(得分:1)

MySql无法知道&#34; feeder应用程序&#34;,除非有一个变量或表填充了该值。如果您拥有此功能,则可以轻松创建一个触发器,在Inventory字段的每次更改时将此信息更新到Quantity表中。

但是,如果您的应用程序使用唯一的mysql用户连接到数据库,您当然可以在TRIGGER中使用CURRENT_USER()内置函数。或者,CONNECTION_ID()在跟踪谁做了什么时可能会有所帮助。例如,您可以创建一个记录应用程序连接ID的新表。在该表中,您可以编写应用程序名称,PID和其他内容。当然,这意味着在建立连接后通过添加适当的insert语句来稍微改变我们的应用程序。开销应该很小,因为通常连接保存在池中,并且不会一直重新创建。