p.363 market_db의 고객 테이블(member)에 입력된 회원의 정보가 변경될 때 변경한 사용자, 시간, 변경 전의 데이터 등을 기록하는 트리거 작성하고 인증하기
singer 테이블 생성하기
USE market_db; CREATE TABLE singer (SELECT mem_id, mem_name, mem_number, addr FROM member);
백업 테이블 생성하기
CREATE TABLE backup_singer ( mem_id CHAR(8) NOT NULL, mem_name VARCHAR(10) NOT NULL, mem_number INT NOT NULL, addr CHAR(2) NOT NULL, modType CHAR(2), -- 변경된 타입. '수정' 또는 '삭제' modDate DATE, -- 변경된 날짜 modUser VARCHAR(30) -- 변경한 사용자 );
singer_updateTrg 트리거 만들기
DROP TRIGGER IF EXISTS singer_updateTrg; DELIMITER $$ CREATE TRIGGER singer_updateTrg -- 트리거 이름 AFTER UPDATE -- 변경 후에 작동하도록 지정 ON singer -- 트리거를 부착할 테이블 FOR EACH ROW BEGIN INSERT INTO backup_singer VALUES( OLD.mem_id, OLD.mem_name, OLD.mem_number, OLD.addr, '수정', curdate(), current_user() ); END $$ DELIMITER ;
singer_deleteTrg 트리거 만들기
DROP TRIGGER IF EXISTS singer_deleteTrg; DELIMITER $$ CREATE TRIGGER singer_deleteTrg -- 트리거 이름 AFTER DELETE -- 삭제 후에 작동하도록 지정 ON singer -- 트리거를 부착할 테이블 FOR EACH ROW BEGIN INSERT INTO backup_singer VALUES( OLD.mem_id, OLD.mem_name, OLD.mem_number, OLD.addr, '삭제', curdate(), current_user() ); END $$ DELIMITER ;
이제 데이터를 수정하고 삭제해보며 backup_singer 테이블에 잘 기록이 되는지 확인해보겠습니다.
데이터 수정 및 삭제
UPDATE singer SET addr = '영국' WHERE mem_id = 'BLK'; DELETE FROM singer WHERE mem_number>= 7;
backup_singer 테이블 확인하기
SELECT * FROM backup_singer;
! TRUNCATE TABLE은 DELETE 트리거가 작동되지 않기 때문에 백업 테이블에 기록되지 않는다.
혼공학습단 10기를 완주했다. 혼공단을 하며 하나의 목표를 가지고 많은 사람들과 같이 공부할 수 있어서 좋았다. 과제를 업로드하면 항상 혼공족장님이 정성스럽게 댓글을 달아주셔서 힘이 났다😘 이제 혼공단 11기를 기다리며 부족했던 부분을 다시 공부해봐야겠다!!