-
마리아디비, 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