首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql:知道表上次修改的日期

MySql:知道表上次修改的日期
EN

Stack Overflow用户
提问于 2011-09-06 13:08:24
回答 1查看 1.1K关注 0票数 3

我在MySql中使用了一个MySql引擎,我试图弄清楚是否有可能知道上一次修改表的日期时间(不管是数据还是结构)。

因为它是InnoDB,所以我不能在information_schema.Tables中使用column update_time,因为那里没有任何记录。information_schema拥有大量数据的性能无论如何都是糟糕的,所以没有大的损失。

我考虑使用一个触发器,在进行修改时将日期插入到自制的“元数据”表中,但MySql不支持DDL触发器(创建、更改和删除语句),因此这也不起作用。

我有点想不起来了,有什么建议吗?

谢谢

编辑:我忘记指定这个日期时间数据将由我正在开发的Silverlight应用程序(通过web服务)检索。

为了提供更多的背景:我在我的web服务上有一个返回数据库结构及其数据的方法。根据大小,这可能是一个相对较长的操作,因为我必须在information_schema表中获取外键信息。因此,只有当数据或结构发生变化时,我才想查询数据库。

EN

回答 1

Stack Overflow用户

发布于 2011-09-06 14:56:17

您可以通过为表创建触发器来使用审计跟踪。

示例

插入重编码时

代码语言:javascript
复制
CREATE TRIGGER emp_insert AFTER Insert ON hs_hr_employee FOR EACH ROW BEGIN
INSERT INTO hs_hr_audit (audit_table_name, audit_row_pk, audit_field_name, audit_old_value, audit_new_value,audit_datetime,audit_user,audit_description) VALUES ( "hs_hr_employee", NEW.emp_number, null, null, null,NOW(),@user,"new record added");
END;

用于更新表

代码语言:javascript
复制
CREATE TRIGGER emp_update AFTER UPDATE ON hs_hr_employee FOR EACH ROW BEGIN IF NOT( OLD.emp_number <=> NEW.emp_number) THEN INSERT INTO hs_hr_audit (audit_table_name, audit_row_pk, audit_field_name, audit_old_value, audit_new_value,audit_datetime,audit_user,audit_description) VALUES ( "hs_hr_employee", OLD.emp_number, "emp_number", OLD.emp_number, NEW.emp_number,NOW(),@user,"record updated"); END IF;
IF NOT( OLD.employee_id <=> NEW.employee_id) THEN INSERT INTO hs_hr_audit (audit_table_name, audit_row_pk, audit_field_name, audit_old_value, audit_new_value,audit_datetime,audit_user,audit_description) VALUES ( "hs_hr_employee", OLD.emp_number, "employee_id", OLD.employee_id, NEW.employee_id,NOW(),@user,"record updated"); END IF;
IF NOT( OLD.emp_lastname<=> NEW.emp_lastname) THEN INSERT INTO hs_hr_audit (audit_table_name, audit_row_pk, audit_field_name, audit_old_value, audit_new_value,audit_datetime,audit_user,audit_description) VALUES ( "hs_hr_employee", OLD.emp_number, "emp_lastname", OLD.emp_lastname, NEW.emp_lastname,NOW(),@user,"record updated"); END IF;
IF NOT( OLD.emp_firstname <=> NEW.emp_firstname) THEN INSERT INTO hs_hr_audit (audit_table_name, audit_row_pk, audit_field_name, audit_old_value, audit_new_value,audit_datetime,audit_user,audit_description) VALUES ( "hs_hr_employee", OLD.emp_number, "emp_firstname", OLD.emp_firstname, NEW.emp_firstname,NOW(),@user,"record updated"); END IF;

在谷歌的审计线索上搜索更多细节

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7320403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档