Post

MySQL : Objects, SQL Programming

MySQL Objects

1. 트리거 (Triggers)

정의: 트리거는 데이터베이스 테이블에 삽입, 수정 또는 삭제와 같은 특정 이벤트가 발생할 때 자동으로 실행되는 SQL 코드 블록. 트리거는 데이터의 무결성을 유지하고 자동화된 작업을 수행하는 데 유용함.

예제:

  • 삽입 트리거: 테이블에 데이터가 삽입될 때 실행.
    1
    2
    3
    4
    5
    6
    
    CREATE TRIGGER before_insert_customer
    BEFORE INSERT ON customers
    FOR EACH ROW
    BEGIN
     SET NEW.created_at = NOW();
    END;
    

    이 트리거는 고객이 삽입될 때 created_at 필드를 현재 시간으로 설정.

  • 수정 트리거: 테이블의 데이터가 수정될 때 실행.
    1
    2
    3
    4
    5
    6
    
    CREATE TRIGGER before_update_customer
    BEFORE UPDATE ON customers
    FOR EACH ROW
    BEGIN
     SET NEW.updated_at = NOW();
    END;
    

    이 트리거는 고객 정보가 수정될 때 updated_at 필드를 현재 시간으로 업데이트.

2. 뷰 (Views)

정의: 뷰는 하나 이상의 테이블에서 데이터를 조회하는 가상 테이블. 뷰를 사용하면 복잡한 쿼리를 단순화하고 데이터의 보안을 향상시킬 수 있다.

예제:

  • 기본 뷰 생성:
    1
    2
    3
    4
    
    CREATE VIEW customer_orders AS
    SELECT customers.name, orders.order_id, orders.amount
    FROM customers
    JOIN orders ON customers.customer_id = orders.customer_id;
    

    이 뷰는 고객과 주문 테이블을 조인하여 고객의 이름과 주문 정보를 제공.

  • 업데이트 가능한 뷰:
    1
    2
    3
    4
    
    CREATE VIEW active_customers AS
    SELECT * FROM customers
    WHERE status = 'active'
    WITH CHECK OPTION;
    

    이 뷰는 활성 상태의 고객만 조회하며, 뷰를 통해 데이터를 업데이트할 때 status가 ‘active’인지 확인.

3. 프로시저 (Stored Procedures)

정의: 프로시저는 반복적인 작업을 수행하기 위해 저장된 SQL 코드 블록. 프로시저는 복잡한 비즈니스 로직을 데이터베이스 내에서 처리할 수 있게 한다.

예제:

  • 프로시저 생성:
    1
    2
    3
    4
    5
    
    CREATE PROCEDURE add_order (IN customer_id INT, IN amount DECIMAL(10,2))
    BEGIN
     INSERT INTO orders (customer_id, amount, order_date)
     VALUES (customer_id, amount, NOW());
    END;
    

    이 프로시저는 주문을 추가하는 기능을 수행.

  • 프로시저 호출:
    1
    
    CALL add_order(1, 100.50);
    

    이 호출은 고객 ID가 1인 고객에 대해 100.50의 주문을 추가.

4. 함수 (Functions)

정의: 함수는 입력 값을 받아 처리한 후 결과를 반환하는 SQL 코드 블록. 함수는 프로시저와 달리 값을 반환할 수 있으며, 복잡한 계산이나 데이터를 처리하는 데 사용.

예제:

  • 함수 생성:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    CREATE FUNCTION get_customer_balance (cust_id INT)
    RETURNS DECIMAL(10,2)
    BEGIN
     DECLARE balance DECIMAL(10,2);
     SELECT SUM(amount) INTO balance
     FROM orders
     WHERE customer_id = cust_id;
     RETURN balance;
    END;
    

    이 함수는 특정 고객의 주문 합계를 반환.

  • 함수 호출:
    1
    
    SELECT get_customer_balance(1);
    

    이 호출은 고객 ID가 1인 고객의 총 주문 금액을 반환.

SQL Programming

1. SQL 프로그래밍 개요

SQL 프로그래밍의 기본 개념과 SQL 스크립트 사용법을 소개한다.

2. 조건문과 반복문

조건문:

  • IF 문: 조건에 따라 다른 SQL 코드를 실행한다.
    1
    2
    3
    
    IF condition THEN
     -- SQL code
    END IF;
    

반복문:

  • LOOP 문: 반복 작업을 수행한다.
    1
    2
    3
    
    LOOP
     -- SQL code
    END LOOP;
    

3. 커서 사용

커서를 사용하여 여러 행을 처리하는 방법을 설명한다.

1
2
3
4
5
6
DECLARE cursor_name CURSOR FOR
SELECT column1, column2 FROM table_name;

OPEN cursor_name;
FETCH cursor_name INTO var1, var2;
CLOSE cursor_name;

4. 예외 처리

예외 상황을 처리하는 방법이다.

1
2
3
4
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
   -- Exception handling code
END;

5. 저장 프로시저와 함수

복잡한 비즈니스 로직을 데이터베이스 내에서 처리하는 방법을 설명한다.

저장 프로시저:

1
2
3
4
CREATE PROCEDURE procedure_name()
BEGIN
   -- Procedure logic
END;

함수:

1
2
3
4
5
6
CREATE FUNCTION function_name()
RETURNS datatype
BEGIN
   -- Function logic
   RETURN value;
END;
This post is licensed under CC BY 4.0 by the author.

© sseung. Some rights reserved.