LastMod:

Introduction

한 번 밀리니까 진도 잡는게 너무 어렵다. 마지막 주여서 다행이다 너무 아쉽다… 일단 기본 미션만 진행하고, 빠른 시일내에 내용 정리도 업데이트 할 예정이다.

기본 미션 인증

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)
);

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 ;

DROP TRIGGER IF EXISTS singer_deLeteirg;
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 ;

위와 같이 트리거를 만드는 쿼리를 실행 시킨 후

UPDATE singer SET addr = '영국' WHERE mem_id = 'BLK';
DELETE FROM singer WHERE mem_number >= 7;

SELECT * FROM backup_singer;

트리거가 잘 동작하는지 확인해보기 위해 위와 같은 쿼리를 실행시켰을 때 아래와 같은 오류가 발생했다.

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.

안전 모드를 사용중이라서 WHERE 절에서 Key Column을 특정하지 않고 여러 개의 Column을 한 번에 UPDATE/DELETE 하려고 하면 막힌다. 아래와 같이 에러로그를 따라가 아래 설정을 끄게 되면 정상 동작을 확인할 수 있다.

image

image

내용 정리도 빠른 시일내에 해야지…

Leave a comment