사용자 도구

사이트 도구


기술문서:레퍼런스:쿼리:기본:객체:트리거

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
기술문서:레퍼런스:쿼리:기본:객체:트리거 [2025/11/26 17:50]
carlito76
기술문서:레퍼런스:쿼리:기본:객체:트리거 [2026/01/27 13:58] (현재)
carlito76
줄 11: 줄 11:
  
 ===== MySQL/MariaDB ===== ===== MySQL/MariaDB =====
-<sxh sql; gutter: true;> +<sxh sql; gutter: true; highlight: [9, 37-38, 40];> 
--- FIXME+/* 
 + MySQL 5.0.2 이상/MariaDB 5.1 이상 
 +*/ 
 +DELIMITER $$ 
 + 
 +-- 생성 
 +CREATE TRIGGER {트리거} 
 + {BEFORE | AFTER} 
 + {INSERT | UPDATE | DELETE} -- 중복 선택 불가 / MariaDB 10.1.8 미만 
 +ON {테이블} 
 + FOR EACH ROW -- ROW 단위 
 +BEGIN 
 + DECLARE {변수} {타입}; 
 + 
 + /* 
 + 쿼리 작성 (트랜잭션 사용 제약) 
 + */ 
 +END 
 +$$ 
 + 
 +DELIMITER ; 
 + 
 +-- 삭제 
 +DROP TRIGGER {트리거}; 
 + 
 +/* 
 + MySQL 5.0.10 이상/MariaDB 5.1 이상 
 +*/ 
 +-- 삭제 
 +DROP TRIGGER IF EXISTS {트리거}; 
 + 
 +/* 
 + MariaDB 10.1.3 이상 
 +*/ 
 +DELIMITER $$ 
 + 
 +-- 생성/수정 
 +CREATE OR REPLACE TRIGGER {트리거} 
 + {BEFORE | AFTER} 
 + {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR) / MariaDB 10.1.8 이상 
 +ON {테이블} 
 + FOR EACH ROW -- ROW 단위 
 +BEGIN 
 + DECLARE {변수} {타입}; 
 + 
 + /* 
 + 쿼리 작성 (트랜잭션 사용 제약) 
 + */ 
 +END 
 +$$ 
 + 
 +DELIMITER ;
 </sxh> </sxh>
  
 ===== MSSQL ===== ===== MSSQL =====
-<sxh sql; gutter: true;> +<sxh sql; gutter: true; highlight: [44-45];> 
--- FIXME+/* 
 + MSSQL 2000 이상 
 +*/ 
 +-- 생성 
 +CREATE TRIGGER {트리거} ON {테이블/뷰} 
 + {INSTEAD OF | AFTER} -- 테이블 
 + -- {INSTEAD OF} -- 뷰 
 + {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (콤마) 
 +AS -- STATEMENT 단위 
 +BEGIN 
 + SET NOCOUNT ON; 
 + 
 + DECLARE @{변수} {타입}; 
 + 
 + /* 
 + 쿼리 작성 (트랜잭션 사용 제약) 
 + */ 
 +END; 
 +GO 
 + 
 +-- 수정 
 +ALTER TRIGGER {트리거} ON {테이블/뷰} 
 + {INSTEAD OF | AFTER} -- 테이블 
 + -- {INSTEAD OF} -- 뷰 
 + {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (콤마) 
 +AS -- STATEMENT 단위 
 +BEGIN 
 + SET NOCOUNT ON; 
 + 
 + DECLARE @{변수} {타입}; 
 + 
 + /* 
 + 쿼리 작성 (트랜잭션 사용 제약) 
 + */ 
 +END; 
 +GO 
 + 
 +-- 삭제 
 +DROP TRIGGER {트리거}; 
 + 
 +/* 
 + MSSQL 2016 이상 
 +*/ 
 +-- 생성/수정 
 +CREATE OR ALTER TRIGGER {트리거} ON {테이블/뷰} 
 + {INSTEAD OF | AFTER} -- 테이블 
 + -- {INSTEAD OF} -- 뷰 
 + {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (콤마) 
 +AS -- STATEMENT 단위 
 +BEGIN 
 + SET NOCOUNT ON; 
 + 
 + DECLARE @{변수} {타입}; 
 + 
 + /* 
 + 쿼리 작성 (트랜잭션 사용 제약) 
 + */ 
 +END; 
 +GO 
 + 
 +-- 삭제 
 +DROP TRIGGER IF EXISTS {트리거};
 </sxh> </sxh>
  
 ===== Oracle/Tibero ===== ===== Oracle/Tibero =====
-<sxh sql; gutter: true;> +<sxh sql; gutter: true; highlight: [26-27];> 
--- FIXME+/* 
 + Oracle 8i 이상/Tibero 5 이상 
 +*/ 
 +-- 생성 
 +CREATE TRIGGER {트리거} 
 + {BEFORE | AFTER} -- 테이블 
 + -- {INSTEAD OF} -- 뷰 
 + {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR) 
 +ON {테이블/뷰} 
 + FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위) 
 +DECLARE 
 + {변수} {타입}; 
 +BEGIN 
 + /* 
 + 쿼리 작성 (트랜잭션 사용 제약) 
 + */ 
 +END; 
 +
 + 
 +-- 삭제 
 +DROP TRIGGER {트리거}; 
 + 
 +/* 
 + Oracle 8i 이상/Tibero 6 이상 
 +*/ 
 +-- 생성/수정 
 +CREATE OR REPLACE TRIGGER {트리거} 
 + {BEFORE | AFTER} -- 테이블 
 + -- {INSTEAD OF} -- 뷰 
 + {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR) 
 +ON {테이블/뷰} 
 + FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위) 
 +DECLARE 
 + {변수} {타입}; 
 +BEGIN 
 + /* 
 + 쿼리 작성 (트랜잭션 사용 제약) 
 + */ 
 +END; 
 +
 + 
 +/* 
 + Oracle 23c 이상 
 +*/ 
 +-- 삭제 
 +DROP TRIGGER IF EXISTS {트리거};
 </sxh> </sxh>
  
 ===== PostgreSQL ===== ===== PostgreSQL =====
-<sxh sql; gutter: true;> +<sxh sql; gutter: true; highlight: [6, 18, 37, 49, 64, 76, 80, 91, 100-101, 103, 106-111, 113];> 
--- FIXME+/* 
 + PostgreSQL 7.3 이상 (Single Quote 방식) 
 +*/ 
 +-- 생성 
 +CREATE FUNCTION {함수}() 
 +RETURNS TRIGGER AS ' 
 +DECLARE 
 + {변수} {타입}; 
 +BEGIN 
 + /* 
 + 쿼리 작성 (트랜잭션 사용 제약) 
 + */ 
 + 
 + RETURN NEW; -- FOR EACH ROW > BEFORE > INSERT | UPDATE 
 + -- RETURN OLD; -- FOR EACH ROW > BEFORE > DELETE 
 + -- RETURN NULL; -- FOR EACH ROW > 작업 종료 (AFTER), 작업 무효화 (BEFORE), FOR EACH STATEMENT 
 +END; 
 +' LANGUAGE plpgsql; 
 + 
 +CREATE TRIGGER {트리거} 
 + {BEFORE | AFTER} 
 + {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR) 
 +ON {테이블} 
 + FOR EACH ROW -- ROW 단위 
 + -- FOR EACH STATEMENT -- STATEMENT 단위 
 + EXECUTE PROCEDURE {함수}(); 
 + 
 +-- 삭제 
 +DROP TRIGGER {트리거} ON {테이블}; 
 +DROP FUNCTION {함수}(); 
 + 
 +/* 
 + PostgreSQL 8.0 이상 (Dollar Quoting 방식) 
 +*/ 
 +-- 생성 
 +CREATE FUNCTION {함수}() 
 +RETURNS TRIGGER AS $$ 
 +DECLARE 
 + {변수} {타입}; 
 +BEGIN 
 + /* 
 + 쿼리 작성 (트랜잭션 사용 제약) 
 + */ 
 + 
 + RETURN NEW; -- FOR EACH ROW > BEFORE > INSERT | UPDATE 
 + -- RETURN OLD; -- FOR EACH ROW > BEFORE > DELETE 
 + -- RETURN NULL; -- FOR EACH ROW > 작업 종료 (AFTER), 작업 무효화 (BEFORE), FOR EACH STATEMENT 
 +END; 
 +$$ LANGUAGE plpgsql; 
 + 
 +CREATE TRIGGER {트리거} 
 + {BEFORE | AFTER} 
 + {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR) 
 +ON {테이블} 
 + FOR EACH ROW -- ROW 단위 
 + -- FOR EACH STATEMENT -- STATEMENT 단위 
 + EXECUTE PROCEDURE {함수}(); 
 + 
 +/* 
 + PostgreSQL 8.4 이상 (Dollar Quoting 방식) 
 +*/ 
 +-- 생성 
 +CREATE FUNCTION {함수}() 
 +RETURNS TRIGGER AS $$ 
 +DECLARE 
 + {변수} {타입}; 
 +BEGIN 
 + /* 
 + 쿼리 작성 (트랜잭션 사용 제약) 
 + */ 
 + 
 + RETURN NEW; -- FOR EACH ROW > BEFORE > INSERT | UPDATE 
 + -- RETURN OLD; -- FOR EACH ROW > BEFORE > DELETE 
 + -- RETURN NULL; -- FOR EACH ROW > 작업 종료 (AFTER), 작업 무효화 (BEFORE), FOR EACH STATEMENT 
 +END; 
 +$$ LANGUAGE plpgsql; 
 + 
 +CREATE TRIGGER {트리거} 
 + {BEFORE | AFTER} 
 + {INSERT | UPDATE | DELETE | TRUNCATE} -- 중복 선택 가능 (OR), TRUNCATE (STATEMENT 단위) 
 +ON {테이블} 
 + FOR EACH ROW -- ROW 단위 
 + -- FOR EACH STATEMENT -- STATEMENT 단위 
 + EXECUTE PROCEDURE {함수}(); 
 + 
 +/* 
 + PostgreSQL 9.1 이상 (Dollar Quoting 방식) 
 +*/ 
 +-- 생성 
 +CREATE FUNCTION {함수}() 
 +RETURNS TRIGGER AS $$ 
 +DECLARE 
 + {변수} {타입}; 
 +BEGIN 
 + /* 
 + 쿼리 작성 (트랜잭션 사용 제약) 
 + */ 
 + 
 + RETURN NEW; -- FOR EACH ROW > BEFORE | INSTEAD OF > INSERT | UPDATE 
 + -- RETURN OLD; -- FOR EACH ROW > BEFORE | INSTEAD OF > DELETE 
 + -- RETURN NULL; -- FOR EACH ROW > 작업 종료 (AFTER), 작업 무효화 (BEFORE | INSTEAD OF), FOR EACH STATEMENT 
 +END; 
 +$$ LANGUAGE plpgsql; 
 + 
 +CREATE TRIGGER {트리거} 
 + {BEFORE | AFTER} -- 테이블 
 + -- {INSTEAD OF} -- 뷰 
 + {INSERT | UPDATE | DELETE | TRUNCATE} -- 중복 선택 가능 (OR), TRUNCATE (STATEMENT 단위) 
 +ON {테이블/뷰} 
 + FOR EACH ROW -- ROW 단위 (테이블/뷰) 
 + -- FOR EACH STATEMENT -- STATEMENT 단위 (테이블) 
 + EXECUTE PROCEDURE {함수}(); 
 + -- EXECUTE FUNCTION {함수}(); -- PostgreSQL 11.0 이상 
 + 
 +-- 삭제 
 +DROP TRIGGER IF EXISTS {트리거} ON {테이블/뷰}; 
 +DROP FUNCTION IF EXISTS {함수}();
 </sxh> </sxh>
  
 {{tag>"쿼리" "Query" "기본" "객체"}} {{tag>"쿼리" "Query" "기본" "객체"}}