-
마리아디비, MySQL 트리거를 통한 테이블 히스토리 쌓기개발 2022. 1. 10. 11:34728x90
CREATE DEFINER=`root`@`127.0.0.1` TRIGGER `table_after_update` AFTER UPDATE ON `table` FOR EACH ROW BEGIN INSERT INTO table_history ( table_idx, table_name, table1, table2, table3, table4, table5, table6, insert_dt ) VALUES ( CONCAT(OLD.table_idx, " -> ", NEW.table_idx), CONCAT(OLD.table_name, " -> ", NEW.table_name), CONCAT(OLD.table1, " -> ", NEW.table1), CONCAT(OLD.table2, " -> ", NEW.table2), CONCAT(OLD.table3, " -> ", NEW.table3), CONCAT(OLD.table4, " -> ", NEW.table4), CONCAT(OLD.table5, " -> ", NEW.table5), CONCAT(OLD.table6, " -> ", NEW.table6), CURRENT_TIMESTAMP() ); END
구조
- table( 히스토리가 필요한 테이블 ), table_history( 히스토리 쌓을 테이블 )
위와 같이 하면 table_history테이블에 업데이트 할때마다 쌓이게 된다.
문제는 특정 컬럼이 아니라 테이블 전체 업데이트를 감지하기 때문에 로우 수가 엄청 쌓이게 된다. 현재 방법은 특정컬럼 위주가 아니기 때문에
다른 table에서 우리가 원하는 데이터가 아닌 컬럼을 수정 할 경우 계속해서 쌓이게 된다.
이 부분을 해결하기 위해서는
if문을 통해서 OLD, NEW를 비교해서 다르면 트리거를 실행을 하거나
업데이트할 컬럼을 명시해줘야한다.
이 부분은 추후에 작성해보자.
--
업데이트할 컬럼이라고 했는데
오라클만 가능하고
MySQL은 불가능하다고 한다.
MySQL이나 Mariadb는 OLD와 NEW를 비교해서 IF문으로 처리 해야한다고 한다.
'개발' 카테고리의 다른 글
파이썬 set (0) 2022.01.15 Postman API Platform | Sign Up for Free (0) 2022.01.11 스프링 부트 테스트 RunWith 지원하지 않는 이유 (0) 2022.01.02 라디오 박스 원하는 값 선택/해제하기 (0) 2021.12.28 우분투 자바 셋팅을 위한 사이트 (0) 2021.12.23