티스토리 뷰

Database

[Database] TRIGGER

daze1002 2025. 3. 24. 00:08
반응형

🔁 1. Trigger (트리거)

Trigger(트리거)INSERT, UPDATE, DELETE 같은 DML 작업이 발생했을 때, 자동으로 실행되는 저장된 프로시저입니다.
데이터 무결성 유지, 변경 이력 기록, 자동 로직 처리 등에 활용됩니다.


📌 1-1. 트리거 개요

✅ 정의

  • 특정 이벤트에 자동으로 반응하는 DB 수준의 자동 실행 SQL 블록
  • BEFORE / AFTER, INSERT / UPDATE / DELETE 조합 가능

✅ 특징

  • 특정 테이블 대상
  • 자동 실행, 수동 호출 불가
  • 행 단위 (FOR EACH ROW)로 주로 사용

✅ 활용

  • 데이터 무결성 검증
  • 변경 이력(Log) 관리
  • 연관 테이블 동기화
  • 복잡한 규칙 자동화

⚠️ 제한사항

  • 한 테이블에 동일 이벤트-타이밍 조합은 하나만 생성 가능
  • 트리거 내 COMMIT / ROLLBACK 사용 불가
  • 뷰나 임시 테이블에 트리거 생성 불가

📊 1-2. 트리거 생성 예시

🔹 기본 구문

CREATE TRIGGER 트리거명
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON 테이블명
FOR EACH ROW
BEGIN
    -- 실행할 SQL
END;

🔹 INSERT 트리거

CREATE TRIGGER trg_after_menu_insert
AFTER INSERT ON tbl_menu
FOR EACH ROW
BEGIN
    INSERT INTO tbl_menu_log (menu_code, menu_name, action, action_time)
    VALUES (NEW.menu_code, NEW.menu_name, 'INSERT', NOW());
END;

🔹 UPDATE 트리거

CREATE TRIGGER trg_after_menu_update
AFTER UPDATE ON tbl_menu
FOR EACH ROW
BEGIN
    INSERT INTO tbl_menu_log (menu_code, menu_name, action, action_time)
    VALUES (NEW.menu_code, NEW.menu_name, 'UPDATE', NOW());
END;

🔹 DELETE 트리거

CREATE TRIGGER trg_after_menu_delete
AFTER DELETE ON tbl_menu
FOR EACH ROW
BEGIN
    INSERT INTO tbl_menu_log (menu_code, menu_name, action, action_time)
    VALUES (OLD.menu_code, OLD.menu_name, 'DELETE', NOW());
END;

🧹 1-3. 트리거 삭제

DROP TRIGGER IF EXISTS trg_after_menu_insert;
DROP TRIGGER IF EXISTS trg_after_menu_update;
DROP TRIGGER IF EXISTS trg_after_menu_delete;

📋 1-4. 트리거 목록 조회

SELECT TRIGGER_NAME, EVENT_MANIPULATION, EVENT_OBJECT_TABLE, ACTION_TIMING
FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_SCHEMA = 'menudb'; -- DB 이름

🔐 1-5. 권한 관리

-- 권한 부여
GRANT CREATE TRIGGER ON menudb.* TO 'user'@'%';

-- 권한 회수
REVOKE CREATE TRIGGER ON menudb.* FROM 'user'@'%';

🚨 1-6. 트리거 내 에러 핸들링

✅ SIGNAL 사용 예시

CREATE TRIGGER trg_before_insert_example
BEFORE INSERT ON tbl_example
FOR EACH ROW
BEGIN
    IF NEW.value < 0 THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = '음수 값은 허용되지 않습니다.';
    END IF;
END;

🔹 예외 발생 확인

INSERT INTO tbl_example (value) VALUES (-5);  -- 에러 발생

Error Code: 1644. 음수 값은 허용되지 않습니다.


✅ Trigger vs Stored Procedure

항목 Trigger Stored Procedure
실행 방식 이벤트 발생 시 자동 직접 호출(CALL) 필요
용도 무결성 유지, 자동 로직 로직 처리, 계산, 반복작업
인수 없음 IN / OUT / INOUT 지원
디버깅 어렵다 비교적 쉬움

'Database' 카테고리의 다른 글

[Database] STORED PROCEDURE  (0) 2025.03.24
[Database] VIEW  (0) 2025.03.23
[Database] INDEX  (0) 2025.03.23
[Database] CONSTRAINTS  (0) 2025.03.23
[Database] DDL  (0) 2025.03.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함