6주차, 혼공단의 마지막 미션.
스토어드 프로시저와, 트리거, 스토어트 함수, 커서에 대 간단한 설명은 지난 포스트에서 확인 가능
기본 미션
🐯 Chapter 07 p. 363 - market_db의 고객 테이블(member)에 입력된 회원의 정보가 변경될 때 변경한 사용자, 시간, 변경 전의 데이터 등을 기록하는 트리거 작성하고 인증샷
CREATE TABLE singer (SELECT mem_id, mem_name, mem_number, addr FROM member);
SELECT * FROM singer;
/* 트리거가 작동되는 백업테이블 생성, 추가 혹은 업데이트 작업이 일어나는경우 변경되기 전의 테이터를 저장.
들어가야 하는 구분인자로 변경된 타입, 변경된 날짜, 변경한 사용자 컬럼을 생성한다. */
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)
);
SELECT * FROM backup_singer;
하나의 테이블에 여러개의 트리거를 부착해도 된다.
/* 업데이트와 삭제가 발생할 때 작동하는 트리거를 singer테이블에 부착 */
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 ;
-- 삭제 발생하면 작동하는 트리거 생성
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 ;
/* 실제 작동하는 트리거 연습해보기
업데이트 실행중 You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column 라는 오류를 마주 치게 된다면
설정을 아래와 같이 바꾸어 준다.
SET SQL_SAFE_UPDATES=0;
*/
SELECT * FROM singer;
-- 업데이트 하기
UPDATE singer
SET addr='영국'
WHERE mem_id LIKE 'BLK';
-- 삭제하기
DELETE FROM singer WHERE mem_number >= 7;
-- 업데이트 및 삭제된 로그 테이블 살펴보기
SELECT * FROM backup_singer;
/* 테이블의 모든 행을 삭제 하기 delete사용하지 않고 TRUNCATE 를 사용
TRUNCATE는 DELETE문이 아니기때문에 backup_singer 에 이력이 남지 않는다 */
TRUNCATE singer;
SELECT * FROM backup_singer;
추가 미션
🐱 Chapter 08 p. 402 - GUI 응용 프로그램 만들고 인증샷
'SQL > 혼공학습단 8기 - SQL' 카테고리의 다른 글
[ '혼공학습단 8기' 리뷰] 느슨해진 SQL 공부를 게임처럼 재미있게 하기 (1) | 2022.08.27 |
---|---|
week5 - 인덱스의 개념과 종류 및 작동 원리와 구조를 이해 (0) | 2022.08.14 |
week4 - 테이블 만들기 CREATE, DROP, 가상의 테이블 view (0) | 2022.08.02 |
week3 - 테이블을 연결하는 JOIN 의 종류 와 예제 (0) | 2022.07.22 |
Week2 - 기본 문법 및 테이블 입력 및 수정 (0) | 2022.07.13 |