2011-09-06 2 views
3

MySql에서 InnoDB 엔진을 사용하고 있으며 테이블이 마지막으로 수정 된 날짜 시간을 알 수 있는지 알아보기 위해 노력 중입니다. 그것은 데이터 또는 그것의 구조입니다).MySql : 테이블이 마지막으로 수정 된 날짜를 알아 두십시오.

InnoDB이므로 information_schemacolumn update_time을 사용할 수 없습니다. Tables은 아무 것도 기록되지 않습니다. 많은 데이터가 포함 된 information_schema의 성능은 어쨌든 엉망이므로 큰 손실은 없습니다.

수정이 이루어지면 자체 "메타 데이터"테이블에 날짜를 삽입하는 트리거를 사용했지만 MySql은 DDL 트리거 (작성, 변경 및 삭제 명령문)를 지원하지 않으므로 어느 쪽이든 일하다.

나는 어떤 아이디어가 부족합니까?

감사

편집 : 나는이 날짜 데이터가 내가 개발하고 있어요 Silverlight 응용 프로그램에 의해 (웹 서비스를 통해) 검색하도록 지정하는 것을 잊었다.

더 많은 배경 제공 : 데이터베이스의 구조와 데이터를 반환하는 웹 서비스에 관한 메소드가 있습니다. 크기에 따라 information_schema 테이블에서 외래 키 정보를 얻어야하므로 비교적 긴 작업이 될 수 있습니다. 그래서 나는 데이터 또는 구조가 변경된 경우에만 데이터베이스를 쿼리하려고합니다. 좋아

답변

0

이 업데이트 tabel에 대한 테이블

예를

간격의 저장 삽입하는

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; 

에 대한 몇 가지 검색을 수행 자세한 내용은 google에서 감사 추적

관련 문제