> 데이터 베이스 > MySQL 튜토리얼 > 업데이트 후 데이터가 실제로 변경될 때만 MySQL 트리거가 실행되도록 하려면 어떻게 해야 합니까?

업데이트 후 데이터가 실제로 변경될 때만 MySQL 트리거가 실행되도록 하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2025-01-13 22:15:46
원래의
247명이 탐색했습니다.

How Can I Make a MySQL Trigger Execute Only When Data Actually Changes After an UPDATE?

MySQL UPDATE 트리거: 데이터가 변경될 때만 실행됩니다.

MySQL 트리거를 사용하면 특정 데이터베이스 이벤트(예: 테이블 업데이트)가 발생할 때 자동으로 작업을 수행할 수 있습니다. 그러나 때로는 업데이트된 행의 데이터가 실제로 변경될 때만 실행되는 트리거가 필요할 수도 있습니다.

질문:

내장된 'AFTER UPDATE' 트리거는 데이터를 변경하는 업데이트와 그렇지 않은 업데이트를 구분하지 않습니다. 이는 특히 많은 열이 있는 테이블을 처리할 때 불필요한 트리거 실행으로 이어질 수 있습니다.

해결책:

트리거에서 모든 열의 변경 사항을 직접 비교할 수는 없지만 타임스탬프를 사용하는 해결 방법이 있습니다. 행이 수정될 때마다 MySQL은 행의 타임스탬프 열을 자동으로 업데이트합니다. 따라서 이 타임스탬프를 사용하여 데이터가 변경되었는지 확인할 수 있습니다.

구현:

  1. 타임스탬프 열 추가: 트리거하려는 테이블에 타임스탬프 열을 만듭니다.
  2. 트리거 만들기: 이전 타임스탬프 값과 새 타임스탬프 값을 비교하는 "AFTER UPDATE" 트리거를 만듭니다. 서로 다른 경우 필요한 작업을 수행하고, 그렇지 않으면 아무 작업도 수행하지 않습니다.

예는 다음과 같습니다.

<code class="language-sql">CREATE TRIGGER ins_sum AFTER UPDATE ON foo
FOR EACH ROW
BEGIN
    IF NEW.ts != OLD.ts THEN
        INSERT INTO bar (a, b) VALUES(NEW.a, NEW.b);
    END IF;
END;</code>
로그인 후 복사

장점:

  • 데이터가 변경될 때만 실행됩니다.
  • 열을 비교하는 데 사용자 정의 코드가 필요하지 않습니다.
  • 모든 크기와 열 수의 테이블에 사용할 수 있습니다.

참고:

이 솔루션은 MySQL의 자동 타임스탬프 업데이트 동작을 사용합니다. 애플리케이션이 타임스탬프를 명시적으로 업데이트하는 경우 예상대로 작동하지 않을 수 있습니다.

위 내용은 업데이트 후 데이터가 실제로 변경될 때만 MySQL 트리거가 실행되도록 하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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