업데이트 후 업데이트 트리거?


13

업데이트 시간을 다음과 같이 기록하기 위해 트리거를 만들고 싶습니다.

CREATE TRIGGER col_update
AFTER UPDATE ON col
FOR EACH ROW BEGIN
UPDATE col SET updated=NOW() WHERE id=NEW.id; // or OLD.id
END

문제는이 트리거가 updated열 을 업데이트하려고 할 때 트리거 를 실행하는 또 다른 업데이트 이벤트이기도합니다. 이것은 무한 루프를 만들며 작동하지 않습니다.

해당 열에 업데이트 시간을 어떻게 저장합니까?

테이블에 많은 열이 있기 때문에 트리거를 사용하고 싶습니다. 업데이트 시간을 수동으로 설정하려고하면 많은 쿼리를 수정해야합니다.

답변:


17

BEFORE대신 트리거를 사용하고 updated값을 할당하는 열을 설정하십시오 NEW.updated(이는 단순한 할당이 아니라 UPDATE). 이렇게하면 추가를 트리거하지 않습니다 UPDATE.

방아쇠 몸체는 단순히

SET NEW.updated = NOW()

나는 일반적으로 다른 테이블 을 수정하거나 새로운 (또는 업데이트 된) 행을 수정하거나 억제 하기 위해 AFTER트리거를 사용 합니다 .BEFOREDELETE


1

귀하의 경우와 마찬가지로 레코드가 변경 될 때마다 업데이트 된 필드를 변경하려는 경우 트리거가 필요하지 않습니다.

다음과 같이 MySQL의 자동 초기화 / 업데이트를 사용할 수 있습니다.

ALTER TABLE `yourtabelname` ADD `updated` DATETIME on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

또는 문서에서 테이블을 만들 때 :

CREATE TABLE t1 (
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.