DELETE 트리거는 말 그대로 DELETE가 실행될 때 자동으로 발동됩니다.
DB에서 특정 테이블의 행이 삭제될 때, 그 순간에 자동으로 실행되는 “후속 작업 스크립트”라고 보면 됩니다.
쉽게 말하면,
“이 테이블에서 누군가 삭제하면 ○○ 작업을 자동으로 실행해라”
라고 DB에 미리 설정해놓은 기능입니다.
테이블에서 DELETE 문이 발생할 때 자동으로 실행되는 트리거.
종류는 보통 2개:
CREATE TRIGGER trg_before_delete_order
BEFORE DELETE ON orders
FOR EACH ROW
BEGIN
-- 주문 삭제 금지 조건
IF :old.status = 'SHIPPED' THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '배송된 주문은 삭제 불가';
END IF;
END;
→ 삭제가 실행되기 전에 트리거가 발동 → 특정 조건이면 삭제 자체를 막음.
CREATE TRIGGER trg_after_delete_payment
AFTER DELETE ON payment
FOR EACH ROW
BEGIN
INSERT INTO payment_history (pay_id, deleted_at)
VALUES (:old.pay_id, SYSDATE);
END;
→ 삭제된 행 정보를 기록하는 “삭제 로그 테이블” 자동 생성.
DELETE 문을 실행하면:
등을 수행하게 할 수 있어요.
그래서 전체 데이터를 지우기만 하면 되는 “임시테이블”이라면:
✔ TRUNCATE가 안전하고 빠름
✔ DELETE는 불필요한 트리거 실행까지 일어날 수 있음
CUBRID는 시스템 카탈로그에서 트리거 정보를 조회할 수 있습니다.
아래 쿼리로 **해당 테이블에 걸린 모든 트리거(INSERT/UPDATE/DELETE 포함)**를 볼 수 있습니다:
SELECT *
FROM db_trigger
WHERE class_name = '테이블명';
SELECT name, status, condition, action_time, event
FROM db_trigger
WHERE class_name = '테이블명'
AND event = 'DELETE';
| 컬럼 | 의미 |
| name | 트리거 이름 |
| event | INSERT / UPDATE / DELETE |
| action_time | BEFORE / AFTER |
| condition | 트리거 발생 조건 |
| status | ACTIVE 여부 |
| action_definition | 트리거가 수행하는 실제 로직 |
| name | event | action_time | status |
| trg_payment_del_log | DELETE | AFTER | ACTIVE |
이런 식으로 나오면 해당 테이블에 DELETE 트리거가 걸려 있는 겁니다.
형님이 이걸 왜 확인하려는지 내가 감이 오는데…
그래서 트리거 때문에 DELETE를 강제로 써야 하는지,
아니면 TRUNCATE를 써도 되는지를 판단하려고 하는 거죠?
트리거 내용도 조회하고 싶으면:
SELECT name, action_definition
FROM db_trigger
WHERE class_name = '테이블명'
AND event = 'DELETE';

| 데이터베이스 테이블 파티션 partition 개념은? (0) | 2025.12.05 |
|---|---|
| 데이터 삭제 delete / truncate / partition drop 쓰는 방법 차이 (0) | 2025.12.05 |
| 데이터 삭제할때 delete와 truncate 차이점은? (0) | 2025.12.02 |
| 데이터 공통 코드 DB 테이블에서 코드 관리하는 방식과 소스코드에서 enum 방식 관리 차이점과 장단점은? (0) | 2025.11.12 |
| 엑셀파일 등 DB 테이블 데이터 INSERT 시 반드시 체크할 12가지 (0) | 2025.11.05 |