기록 테이블 및 트리거를 사용하여 MySQL에서 레코드 변경 추적
MySQL은 데이터베이스의 레코드 변경을 추적하기 위한 여러 옵션을 제공합니다. 효과적인 접근 방식 중 하나는 각 대상 데이터 테이블에 대한 기록 테이블을 생성하는 것입니다. 이 기록 테이블은 원본 테이블의 각 행에서 수행된 모든 삽입, 업데이트 및 삭제 작업을 저장합니다.
기록 테이블 생성
기록 테이블을 생성하려면, 다음 SQL 쿼리를 사용하여 'MyDB.data'를 추적하려는 데이터 테이블 이름으로 바꾸고 'primary_key_column'을 기본 키 이름으로 바꿀 수 있습니다. 열:
CREATE TABLE MyDB.data_history LIKE MyDB.data; ALTER TABLE MyDB.data_history MODIFY COLUMN primary_key_column int(11) NOT NULL, DROP PRIMARY KEY, ENGINE = MyISAM, ADD action VARCHAR(8) DEFAULT 'insert' FIRST, ADD revision INT(6) NOT NULL AUTO_INCREMENT AFTER action, ADD dt_datetime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER revision, ADD PRIMARY KEY (primary_key_column, revision);
트리거를 사용하여 변경 사항 캡처
기록 테이블을 생성한 후 원래 데이터 테이블에 변경 사항을 자동으로 기록하도록 트리거를 설정할 수 있습니다. 삽입, 업데이트 및 삭제 작업의 경우 다음 트리거를 사용할 수 있습니다.
CREATE TRIGGER MyDB.data__ai AFTER INSERT ON MyDB.data FOR EACH ROW INSERT INTO MyDB.data_history SELECT 'insert', NULL, NOW(), d.* FROM MyDB.data AS d WHERE d.primary_key_column = NEW.primary_key_column; CREATE TRIGGER MyDB.data__au AFTER UPDATE ON MyDB.data FOR EACH ROW INSERT INTO MyDB.data_history SELECT 'update', NULL, NOW(), d.* FROM MyDB.data AS d WHERE d.primary_key_column = NEW.primary_key_column; CREATE TRIGGER MyDB.data__bd BEFORE DELETE ON MyDB.data FOR EACH ROW INSERT INTO MyDB.data_history SELECT 'delete', NULL, NOW(), d.* FROM MyDB.data AS d WHERE d.primary_key_column = OLD.primary_key_column;
기록 테이블의 예
기록 테이블은 원본 데이터 테이블. 예를 들어, 기본 키로 'ID' 열이 있는 데이터 테이블이 있으면 다음과 같은 기록 테이블 항목이 생성될 수 있습니다.
ID revision action data columns.. 1 1 'insert' .... initial entry for row where ID = 1 1 2 'update' .... changes made to row where ID = 1 2 1 'insert' .... initial entry, ID = 2 3 1 'insert' .... initial entry, ID = 3 1 3 'update' .... more changes made to row where ID = 1 3 2 'update' .... changes made to row where ID = 3 2 2 'delete' .... deletion of row where ID = 2
변경 사항 보기
특정 열에 대한 변경 사항을 보려면 기본 키 및 개정 열에서 기록 테이블 자체를 조인하고 적절한 SQL 문을 사용하여 이전 값과 현재 값을 비교할 수 있습니다.
위 내용은 기록 테이블과 트리거를 사용하여 MySQL의 레코드 변경 사항을 어떻게 추적할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!