ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 트리거
    데이터베이스/SQL 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();

    '데이터베이스 > SQL' 카테고리의 다른 글

    회원 관리 시스템  (0) 2023.12.29
    PHP와 MariaDB 연동  (0) 2023.12.28
    PHP 기본 문법  (0) 2023.12.28
    MariaDB 생성 및 Query Practice  (0) 2023.12.21
    XAMPP 설치  (0) 2023.12.14
Designed by Tistory.