mysql - MySQL中某列的更新来源和时间

标签 mysql triggers audit-logging

我的 MySQL 表 Inventory 中有一个列 Quantity,它从多个源更新。我需要在名为 QuantityLog 的表中的另一列上维护对 Quantity 的上次更新时间和执行此操作的源的跟踪。 QuantityLog 列(文本类型)的内容应该是这样的(只需要最新的更新详细信息):

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

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

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

最佳答案

MySql 无法知道“供给应用程序”,除非有一个变量或表填充了该值。如果您有此信息,则可以轻松创建一个触发器,以便在 Quantity 字段每次发生更改时将此信息更新到 Inventory 表中。

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

关于mysql - MySQL中某列的更新来源和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31228658/

相关文章:

mysql - 当 MySQL 中的 SUM 为空时,减法结果为 Null

mysql - 在mysql中使用Ifexists作为select语句

mysql - TypeORM/MySQL - 拦截更新/插入查询并在 'editedBy' 列上自动设置应用程序用户 ID

PHP MySQL 数组,如何获取 API 的特定结构?

php - 调用未定义的函数 cell()

sql - 如果语句包含没有 INTO 子句的 OUTPUT 子句,则 DML 语句不能有任何启用的触发器

mysql - 在 SQL 中声明变量的正确方法是什么?

mysql - AFTER INSERT 触发器内的 SELECT count() 不正确

grails - 为用户登录插入审核日志记录条目

grails - 使用审计日志插件在 grails 中插入双记录