반응형
MySQL 트리거를 사용하여 모든 테이블 변경 내용을 보조 테이블에 기록
테이블이 있습니다.
CREATE TABLE `data_table` (
`data_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`field1` INT NOT NULL ,
`field2` INT NOT NULL ,
`field3` INT NOT NULL
) ENGINE = MYISAM ;
필드 1, 2, 3에 기록할 기회를 기록합니다.
CREATE TABLE `data_tracking` (
`tracking_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`data_id` INT NOT NULL ,
`field` VARCHAR( 50 ) NOT NULL ,
`old_value` INT NOT NULL ,
`new_value` INT NOT NULL ,
`modified` DATETIME NOT NULL
) ENGINE = MYISAM ;
MySQL 5를 사용하고 있는데, 트리거를 생성하고 싶습니다.data_table이 업데이트 될 때마다 data_tracking에 새로운 행을 삽입하고 이전/업데이트된 값과 변경된 필드를 기록하고자 합니다.저는 다음과 같이 시도해 보았지만 성공하지 못했습니다.
DELIMITER $$
DROP TRIGGER `update_data `$$
CREATE TRIGGER `update_data` AFTER UPDATE on `data_table`
FOR EACH ROW
BEGIN
IF (NEW.field1 != OLD.field1) THEN
INSERT INTO data_tracking set old_value = OLD.field1, new_value = NEW.field1, field = "field1";
END IF;
END$$
DELIMITER ;
삽입 라인에 오류가 발생했습니다. 구문이 무엇이어야 하는지 또는 올바른 방법으로 진행하는 것인지 잘 모르겠습니다.어떤 도움이라도 주시면 감사하겠습니다.감사해요.
삽입 구문은
INSERT INTO table (columns_list) VALUES (values_list)
따라서 삽입은 다음과 같습니다(MySQL 전문가는 아니지만 쿼리에 맞출 수 있습니다).
INSERT INTO data_tracking
(`data_id` , `field` , `old_value` , `new_value` , `modified` )
VALUES
(NEW.data_id, 'field1', OLD.field, NEW.field, CURRENT_DATETIME());
그리고 필드2 및 필드3에 대한 변동에 대해 반복합니다.
이것이 완전한 트리거가 될 것으로 생각합니다. 시도해 보십시오.
DELIMITER $$
DROP TRIGGER `update_data `$$
CREATE TRIGGER `update_data` AFTER UPDATE on `data_table`
FOR EACH ROW
BEGIN
IF (NEW.field1 != OLD.field1) THEN
INSERT INTO data_tracking
(`data_id` , `field` , `old_value` , `new_value` , `modified` )
VALUES
(NEW.data_id, "field1", OLD.field1, NEW.field1, NOW());
END IF;
IF (NEW.field2 != OLD.field2) THEN
INSERT INTO data_tracking
(`data_id` , `field` , `old_value` , `new_value` , `modified` )
VALUES
(NEW.data_id, "field2", OLD.field2, NEW.field2, NOW());
END IF;
IF (NEW.field3 != OLD.field3) THEN
INSERT INTO data_tracking
(`data_id` , `field` , `old_value` , `new_value` , `modified` )
VALUES
(NEW.data_id, "field3", OLD.field3, NEW.field3, NOW());
END IF;
END$$
DELIMITER ;
언급URL : https://stackoverflow.com/questions/779230/using-mysql-triggers-to-log-all-table-changes-to-a-secondary-table
반응형
'programing' 카테고리의 다른 글
고정()과 고정() 사이의 차이? (0) | 2023.09.26 |
---|---|
TensorFlow, "'module' 개체에 'placeholder' 속성이 없습니다." (0) | 2023.09.26 |
채우기 자바스크립트/Jquery with Json data 클릭 시 상자 선택 옵션 (0) | 2023.09.26 |
WordPress 스팸 on ?action=register URL (0) | 2023.09.26 |
다중 사이트 네트워크에서 사이트 단위로 플러그인을 설치하는 방법은 무엇입니까? (0) | 2023.09.21 |