:: 실무에서는 이렇게 계속 저장해주는 방식이 아닌 실시간으로 변경되는 백업 기능을 탑재한 툴을 사용한다. ( 'MySQL Enterprise Backup', 추가사용 권장 툴 : 'MySQL Enterprise Monitor' 서버 상태를 GUI모드에서 한눈으로 파악할 수 있는 기능을 제공해준다. )
테이블에 부착되어서 테이블에 INSERT나 UPDATE작업이 발생되면 실행되는 코드를 말한다.
회원 테이블에 새로운 회원을 추가해줬다.
INSERT INTO memberTBL VALUES ('Figure', '연아', '경기도 군포시 당정동');
이후 UPDATE로 주소를 변경시켜본다.
UPDATE memberTBL SET memberAddress = '서울 강남구 역삼동' WHERE memberName = '연아';
그런데 UPDATE를 할때 이런 에러가 뜰 때가 있다.
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.
에러원인 : 테이블에서 키값을 이용한 update나 delete만을 허용하도록 되어 있는데, 그렇지 않고 좀 더 넓은 범위의 SQL을 적용하려고 할 때, MySQLWorkBench에서 경고를 주는 것이다.
즉, 하나의 레코드만 update, delete하도록 설정되어 있는데, 다수의 레코드를 update나 delete하는 SQL명령어가 실행되기 때문에 발생한다.
해결방법 1
set sql_safe_updates=0;
SQL문에 입력하고 적용시켜주면 된다.
해결방법 2
SQL : MySQLWorkBench Click
왼쪽에 SQL Editor로 들어와서 아래 Safe Updates (rejects UPDATEs and DELETEs with no restrictions)를 체크해준다.
다시 돌아와서
UPDATE로 주소를 변경하고 다시한번 memberTBL을 SELECT해보면 아래처럼 memberAddress가 변경되어 있을 것이다.
그리고 이번에는 연아를 회원 테이블에서 삭제해본다.
DELETE FROM memberTBL WHERE memberName = ‘연아';
회원 테이블에서 삭제하고나면 연아의 정보는 어디에도 기록되어 있지 않다.
만약 쇼핑몰의 회원이었다면 그걸 증명해줄 방법이 없다.
위같은 사례를 방지하기 위해 회원 테이블에서 행 데이터를 삭제할 경우 다른 테이블에 지워진 데이터와 날짜를 기록해두면 좋다.
보관 테이블 만들기
CREATE TABLE deletedMemberTBL (
memberID CHAR(8),
memberName CHAR(5),
memberAddress CHAR(20),
deletedDate DATE
);
SELECT * FROM deletedMemberTBL;
테이블을 생성하고 SELECT해보면
deletedMemberTBL 테이블이 생성된다.
memberTBL에서 DELETE작업이 일어나면 deletedMemberTBL에 지워진 데이터가 기록되는 트리거를 만들어준다.
DELIMITER //
CREATE TRIGGER trg_deletedMemberTBL
AFTER DELETE
ON memberTBL
FOR EACH ROW
BEGIN
-- OLD
INSERT INTO deletedMemberTBL VALUES (OLD.memberID, OLD.memberName, OLD.memberAddress, CURDATE());
END //
DELIMITER ;
trg_deletedMemberTBL : 트리거 이름
AFTER DELETE : 삭제 후 작동하도록 지정
ON memberTBL : 트리거를 부착할 테이블
FOR EACH ROW : 각 행마다 적용시킴
-- OLD : 테이블의 내용을 백업 테이블에 삽입
다시한번 회원을 삭제해본다.
회원에서 당탕이를 삭제했다.
deletedMemberTBL을 확인해본다.
백업테이블( deletedMemberTBL )에 날짜가 추가되어 등록되어 있는것을 볼 수 있다.