>데이터 베이스 >MySQL 튜토리얼 >트리거와 보기를 사용하여 MySQL에서 데이터베이스 변경 사항을 어떻게 추적하고 볼 수 있습니까?

트리거와 보기를 사용하여 MySQL에서 데이터베이스 변경 사항을 어떻게 추적하고 볼 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-07 04:16:11964검색

How Can I Track and View Database Changes in MySQL Using Triggers and Views?

MySQL을 사용하여 데이터베이스 변경 내역 추적

많은 데이터베이스 시스템에는 시간 경과에 따른 레코드 변경 사항을 추적하는 기능이 필요합니다. MySQL은 이를 달성하기 위한 간단한 기술을 제공합니다. 변경 사항을 모니터링하려는 "data"라는 이름의 데이터 테이블을 생각해 보세요.

시작하려면 세 개의 추가 열을 제외하고 동일한 구조를 사용하여 "data"에 대한 기록 테이블을 만듭니다.

  • 액션: VARCHAR(8) 기본값 '삽입'
  • 개정: INT(6) NOT NULL auto_increment
  • dt_datetime: DATETIME NOT NULL 기본값 CURRENT_TIMESTAMP

이 열은 작업을 저장합니다. (삽입/업데이트/삭제), 시퀀스 번호, 작업 날짜 및 시간입니다.

다음으로 이러한 작업을 캡처하고 기록 테이블을 채우는 트리거를 만듭니다.

  • 트리거 삽입 후: INSERT INTO data_history (action, revision, dt_datetime, ...) SELECT 'insert', NULL, NOW(), ... FROM 데이터 WHERE ...
  • 업데이트 후 트리거: INSERT INTO data_history (action, revision, dt_datetime, ...) SELECT 'update', NULL, NOW(), ... FROM 데이터 WHERE ...
  • 삭제 트리거 전: INSERT INTO data_history (action, revision, dt_datetime, ...) SELECT 'delete', NULL, NOW(), ... FROM data WHERE ...

이제 모든 데이터 변경 사항은 "data_history" 테이블에 기록됩니다. 업데이트 전반에 걸쳐 특정 열에 대한 변경 사항을 표시하려면 기본 키 및 시퀀스 열에서 기록 테이블을 자체적으로 조인할 수 있습니다.

CREATE VIEW data_history_changes AS
SELECT t2.dt_datetime, t2.action, t1.row_id,
IF(t1.a_column = t2.a_column, t1.a_column, t1.a_column || " to " || t2.a_column) AS a_column
FROM data_history AS t1 INNER JOIN data_history AS t2
ON t1.row_id = t2.row_id
WHERE (t1.revision = 1 AND t2.revision = 1) OR t2.revision = t1.revision + 1
ORDER BY t1.row_id ASC, t2.revision ASC

이렇게 하면 "데이터" 테이블.

위 내용은 트리거와 보기를 사용하여 MySQL에서 데이터베이스 변경 사항을 어떻게 추적하고 볼 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.