데이터베이스/SQL
트리거
haventmetyou
2024. 1. 25. 16:46
DELIMITER // -- INSERT 트리거
CREATE TRIGGER trg_insertedMemberTBL
AFTER INSERT
ON memberTBL
FOR EACH ROW
BEGIN
INSERT INTO deletedmembertbl
VALUES (NEW.memberID, NEW.memberName, NEW.memberAddress, CURDATE());
END //
DELIMITER ;
INSERT INTO memberTBL VALUES ('ABCD', '테스트', '서울시 어쩌구');
DELIMITER // -- 업데이트 트리거 1
CREATE TRIGGER trg_updatedMemberTBL
AFTER UPDATE
ON memberTBL
FOR EACH ROW
BEGIN
INSERT INTO deletedmemberTBL
VALUES (NEW.memberID, NEW.memberName, NEW.memberAddress, CURDATE());
END //
DELIMITER ;
UPDATE memberTBL SET memberName = 'Test' WHERE memberID = 'ABCD';
INSERT INTO memberTBL VALUES ('QWER', 'QWER', '이게 되나');
UPDATE memberTBL SET memberAddress = '확인 중' WHERE memberName = 'QWER';
DELIMITER // -- 업데이트 트리거 2
CREATE TRIGGER trg_updatedMemberTBL2
AFTER UPDATE
ON memberTBL
FOR EACH ROW
UPDATE deletedmemberTBL
SET
memberID = NEW.memberID,
memberName = NEW.memberName,
memberAddress = NEW.memberAddress
WHERE
memberID = OLD.memberID; -- 기존의 행을 찾아 업데이트합니다.
//
DELIMITER ;
INSERT INTO memberTBL VALUES ('FIND', '업데이트', '트리거 2');
UPDATE memberTBL SET memberID = 'GET' WHERE memberName = '업데이트';
모든 트리거 적용되는 것 확인 완
-- 뷰
CREATE VIEW uv_memberTBL2
AS
SELECT memberID, memberAddress FROM memberTBL;
SELECT * FROM uv_memberTBL2
-- 스토어드 프로시저 1
DELIMITER //
CREATE PROCEDURE StProc()
BEGIN
SELECT * FROM memberTBL ;
SELECT * FROM productTBL ;
END //
DELIMITER ;
CALL StProc() ;
-- 스토어드 프로시저 2 (계산)
DROP PROCEDURE IF EXISTS errorProc;
DELIMITER $$
CREATE PROCEDURE errorProc()
BEGIN
DECLARE i INT; -- 1씩 증가하는 값
DECLARE hap INT; -- 합계(정수형). 오버플로 발생시킬 예정
DECLARE saveHap INT; -- 합계(정수형). 오버플로 직전의 값 저장
DECLARE EXIT HANDLER FOR 1264 -- INT형 오버플로가 발생하면 이 부분 수행
BEGIN
SELECT CONCAT('INT 오버플로 직전의 합계 -->', saveHap);
SELECT CONCAT('1+2+3+4+...+',i ,'=오버플로');
END;
SET i = 1; -- 1부터 증가
SET hap = 0; -- 합계 누적
WHILE (TRUE) DO -- 무한 루프
SET saveHap = hap; -- 오버플로 직전의 합계 저장
SET hap = hap + i; -- 오버플로가 나면 위에 수행하는 부분 수행
SET i = i + 1;
END WHILE ;
END $$
DELIMITER ;
CALL errorProc();