DBMS/개념

24_ DBMS 심화 주제

seungwon-1 2025. 10. 26. 13:32

1. 저장 프로시저 (Stored Procedure)

저장 프로시저는 자주 사용하는 SQL 명령어 집합을 데이터베이스 내부에 저장해두고, 필요할 때마다 호출해 실행하는 기능이다.
복잡한 연산을 서버 내부에서 처리할 수 있어 성능 향상코드 재사용성에 유리하다.

-- 학생의 평균 점수를 계산하는 저장 프로시저
CREATE PROCEDURE GetAverageScore(IN student_id INT)
BEGIN
    DECLARE avg_score FLOAT;
    SELECT AVG(score) INTO avg_score
    FROM grades
    WHERE id = student_id;

    SELECT CONCAT('평균 점수: ', avg_score) AS result;
END;

 

2. 사용자 정의 함수 (User-Defined Function)

사용자 정의 함수는 사용자가 직접 정의한 연산이나 변환을 함수 형태로 작성해 SQL 내에서 호출할 수 있도록 하는 기능이다.

-- 학생 점수를 등급으로 변환하는 함수
CREATE FUNCTION GetGrade(score INT)
RETURNS CHAR(1)
DETERMINISTIC
BEGIN
    DECLARE grade CHAR(1);
    IF score >= 90 THEN
        SET grade = 'A';
    ELSEIF score >= 80 THEN
        SET grade = 'B';
    ELSE
        SET grade = 'C';
    END IF;
    RETURN grade;
END;

 

3. 트리거 (Trigger)

트리거는 데이터 변경(INSERT, UPDATE, DELETE)이 발생할 때 자동으로 실행되는 SQL 블록이다.
주로 데이터 무결성을 유지하거나 로그 기록을 남길 때 사용한다.

-- 학생 테이블에 새 데이터가 추가될 때 로그 테이블에 기록
CREATE TRIGGER after_student_insert
AFTER INSERT ON student
FOR EACH ROW
BEGIN
    INSERT INTO student_log(student_id, action_time)
    VALUES (NEW.id, NOW());
END;

 

4. 커서 (Cursor)

커서는 SQL 결과 집합을 한 행씩 처리해야 할 때 사용하는 도구이다.
루프 구조를 통해 개별 레코드를 제어할 수 있다.

-- 모든 학생의 점수를 출력하는 커서 예제
DECLARE done INT DEFAULT 0;
DECLARE s_id INT;
DECLARE s_name VARCHAR(50);
DECLARE cur CURSOR FOR SELECT id, name FROM student;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN cur;
read_loop: LOOP
    FETCH cur INTO s_id, s_name;
    IF done THEN
        LEAVE read_loop;
    END IF;
    SELECT CONCAT('ID: ', s_id, ', 이름: ', s_name);
END LOOP;
CLOSE cur;

 

5. 트랜잭션 관리 (Transaction Management)

트랜잭션은 하나의 작업 단위를 구성하는 SQL 명령어들의 묶음이다.
모두 성공하거나, 모두 실패해야 한다는 ACID 원칙을 따른다.

-- 트랜잭션 예제: 계좌 이체
START TRANSACTION;

UPDATE account SET balance = balance - 10000 WHERE id = 1;
UPDATE account SET balance = balance + 10000 WHERE id = 2;

IF @@ERROR = 0 THEN
    COMMIT;   -- 모두 성공 시 확정
ELSE
    ROLLBACK; -- 오류 발생 시 되돌림
END IF;

이 다섯 가지는 DBMS의 고급 기능으로, 단순 쿼리 작성 이상으로 프로시저적 로직, 데이터 무결성, 트랜잭션 안정성을 제어할 때 필수적으로 사용된다.

'DBMS > 개념' 카테고리의 다른 글

26_ 트리거(TRIGGER) 정리  (0) 2025.10.30
25_ 정규표현식(Regular Expression)  (0) 2025.10.28
23_ CASE문  (0) 2025.10.24
22_ CTE (Common Table Expressions)  (0) 2025.10.22
21_ 집합 연산자  (0) 2025.10.20