我在MySql中使用InnoDB引擎,我试图弄清楚是否可以知道上次修改表的日期时间(无论是数据还是结构)。
由于它是InnoDB,我无法使用column update_time
中的information_schema
。Tables
,因为没有记录任何内容。无论如何,具有大量数据的information_schema
的表现都很糟糕,所以没有大的遗失。
我考虑使用一个触发器,在进行修改时将日期插入自制的“元数据”表中,但是MySql不支持DDL触发器(Create,Alter和Drop语句),所以这赢得了'工作要么。
我在这里有点想法,任何提示?
由于
编辑:我忘了指定我正在开发的Silverlight应用程序将检索此日期时间数据(通过Web服务)。
为了提供更多背景知识:我的Web服务上有一个方法,它返回数据库的结构及其数据。根据大小,这可能是一个相对较长的操作,因为我必须在information_schema
表中获取外键信息。所以我只想在数据或结构发生变化的情况下查询数据库。
答案 0 :(得分:0)
好的,您可以通过为表创建触发器来使用审计跟踪
示例
插入recored
时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;
在谷歌的审计跟踪上进行一些搜索以获取更多详细信息