2011-09-06 82 views
3

我在MySql中使用InnoDB引擎,我试图找出是否有可能知道上次修改表的日期时间(是它它是数据或它的结构)。MySql:知道表最后修改日期

既然是InnoDB,我就不能使用information_schema中的column update_timeTables因为没有记录在那里。具有大量数据的information_schema的表现无论如何都是蹩脚的,所以没有大的损失。

我想过使用一个触发器,它会在做出修改时在自制的“元数据”表中插入日期,但MySql不支持DDL触发器(Create,Alter和Drop语句),所以这次获胜也不行。

我有点想法在这里,任何提示?

感谢

编辑:我忘了指定这个日期数据(通过Web服务)的我正在开发一个Silverlight应用程序进行检索。

为了给出更多背景:我的Web服务上有一个方法,它返回数据库的结构及其数据。根据大小,这可能是一个相对较长的操作,因为我必须在information_schema表中获取外键信息。所以我只想在数据或结构发生变化的情况下查询数据库。

回答

0

好吧,你可以通过创建一个触发器表

例如

当插入条记录

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; 

用于更新TABEL使用审核跟踪

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; 

做一些搜索上审计跟踪谷歌更多细节