> 데이터 베이스 > MySQL 튜토리얼 > 기록 테이블과 트리거를 사용하여 MySQL의 레코드 변경 사항을 어떻게 추적할 수 있습니까?

기록 테이블과 트리거를 사용하여 MySQL의 레코드 변경 사항을 어떻게 추적할 수 있습니까?

DDD
풀어 주다: 2024-12-15 00:45:14
원래의
308명이 탐색했습니다.

How Can I Track Record Changes in MySQL Using History Tables and Triggers?

기록 테이블 및 트리거를 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿