2011-09-06 84 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; 

做一些搜索上審計跟蹤谷歌更多細節