我在MySql中使用了一个MySql引擎,我试图弄清楚是否有可能知道上一次修改表的日期时间(不管是数据还是结构)。
因为它是InnoDB,所以我不能在information_schema.Tables中使用column update_time,因为那里没有任何记录。information_schema拥有大量数据的性能无论如何都是糟糕的,所以没有大的损失。
我考虑使用一个触发器,在进行修改时将日期插入到自制的“元数据”表中,但MySql不支持DDL触发器(创建、更改和删除语句),因此这也不起作用。
我有点想不起来了,有什么建议吗?
谢谢
编辑:我忘记指定这个日期时间数据将由我正在开发的Silverlight应用程序(通过web服务)检索。
为了提供更多的背景:我在我的web服务上有一个返回数据库结构及其数据的方法。根据大小,这可能是一个相对较长的操作,因为我必须在information_schema表中获取外键信息。因此,只有当数据或结构发生变化时,我才想查询数据库。
发布于 2011-09-06 14:56:17
您可以通过为表创建触发器来使用审计跟踪。
示例
插入重编码时
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;用于更新表
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;在谷歌的审计线索上搜索更多细节
https://stackoverflow.com/questions/7320403
复制相似问题