MySQL 트리거: 실제 데이터 변경 감지
MySQL 트리거는 데이터가 수정될 때 특정 작업을 수행하는 데 사용됩니다. 그러나 중요한 데이터 변경만 작업을 트리거하는 경우 데이터가 실제로 변경되었는지 여부를 확인하는 것은 어려운 일이 됩니다. NEW
및 OLD
키워드를 사용하면 열 수준 비교가 가능하지만 열이 많은 테이블에서는 단일 비교에만 의존하면 지루하고 오류가 발생하기 쉽습니다.
타임스탬프 기반 트리거링
이 문제를 해결하는 한 가지 방법은 타임스탬프를 활용하여 데이터 수정이 발생했는지 확인하는 것입니다. MySQL은 행이 삽입되거나 수정될 때 타임스탬프 열을 현재 시간으로 자동 업데이트합니다. 새로운 타임스탬프와 이전 타임스탬프를 비교하여 변경 사항이 있는지 확인할 수 있습니다.
구현 방법
실제 데이터가 변경될 때만 실행되는 트리거를 구현하려면 다음 단계를 고려하세요.
NEW
및 OLD
값을 비교합니다. 트리거 작업은 타임스탬프가 다른 경우에만 실행됩니다. <code class="language-sql">CREATE TABLE foo ( a INT, b INT, ts TIMESTAMP ); 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>
예
이 예에서 foo
테이블에는 타임스탬프를 추적하기 위한 추가 ts
열이 포함되어 있습니다. ins_sum
트리거는 업데이트된 행의 타임스탬프가 변경되는 경우에만 bar
테이블에 레코드를 삽입하도록 구성됩니다.
<code class="language-sql">-- 向'foo'表插入初始数据 INSERT INTO foo (a, b) VALUES (1, 1), (2, 2), (3, 3); -- 更新'foo'表,但未进行任何更改 UPDATE foo SET b = 3 WHERE a = 3; -- 验证触发器未执行 SELECT * FROM bar; -- 输出:空集(未检索到任何行) -- 使用实际更改更新'foo'表 UPDATE foo SET b = 4 WHERE a = 3; -- 验证触发器已执行 SELECT * FROM bar; -- 输出:包含数据的行(触发器操作已完成)</code>
타임스탬프 사용의 장점
위 내용은 MySQL 트리거는 어떻게 실제 데이터 변경 사항을 효율적으로 감지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!