사용자 도구

사이트 도구


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

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
기술문서:레퍼런스:쿼리:기본:객체:트리거 [2026/01/23 15:34]
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];>
 /* /*
  MySQL 5.0.2 이상/MariaDB 5.1 이상  MySQL 5.0.2 이상/MariaDB 5.1 이상
 */ */
--- 생성 
 DELIMITER $$ DELIMITER $$
  
 +-- 생성
 CREATE TRIGGER {트리거} CREATE TRIGGER {트리거}
  {BEFORE | AFTER}  {BEFORE | AFTER}
- {INSERT | UPDATE | DELETE} -- 중복 선택 불가 + {INSERT | UPDATE | DELETE} -- 중복 선택 불가 / MariaDB 10.1.8 미만 
- ON {테이블}+ON {테이블}
  FOR EACH ROW -- ROW 단위  FOR EACH ROW -- ROW 단위
 BEGIN BEGIN
 + DECLARE {변수} {타입};
 +
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
 END END
줄 40: 줄 42:
 -- 삭제 -- 삭제
 DROP TRIGGER IF EXISTS {트리거}; 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];>
 /* /*
  MSSQL 2000 이상  MSSQL 2000 이상
줄 52: 줄 76:
  -- {INSTEAD OF} -- 뷰  -- {INSTEAD OF} -- 뷰
  {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (콤마)  {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (콤마)
- AS -- STATEMENT 단위+AS -- STATEMENT 단위
 BEGIN 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; END;
줄 66: 줄 111:
  MSSQL 2016 이상  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 {트리거}; DROP TRIGGER IF EXISTS {트리거};
줄 71: 줄 133:
  
 ===== Oracle/Tibero ===== ===== Oracle/Tibero =====
-<sxh sql; gutter: true; highlight: [5, 27];>+<sxh sql; gutter: true; highlight: [26-27];>
 /* /*
  Oracle 8i 이상/Tibero 5 이상  Oracle 8i 이상/Tibero 5 이상
줄 80: 줄 142:
  -- {INSTEAD OF} -- 뷰  -- {INSTEAD OF} -- 뷰
  {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR)  {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR)
- ON {테이블/뷰}+ON {테이블/뷰}
  FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위)  FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위)
 DECLARE DECLARE
- -- 변수 선언+ {변수} {타입};
 BEGIN BEGIN
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
 END; END;
줄 102: 줄 164:
  -- {INSTEAD OF} -- 뷰  -- {INSTEAD OF} -- 뷰
  {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR)  {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR)
- ON {테이블/뷰}+ON {테이블/뷰}
  FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위)  FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위)
 DECLARE DECLARE
- -- 변수 선언+ {변수} {타입};
 BEGIN BEGIN
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
 END; END;
줄 114: 줄 176:
  
 /* /*
- Oracle 23c+ Oracle 23c 이상
 */ */
 -- 삭제 -- 삭제
줄 121: 줄 183:
  
 ===== PostgreSQL ===== ===== PostgreSQL =====
-<sxh sql; gutter: true; highlight: [537480, 80-84106112-117];> +<sxh sql; gutter: true; highlight: [61837, 49, 64, 76, 80, 91, 100-101103106-111, 113];>
 /* /*
- PostgreSQL 7.3 이상+ PostgreSQL 7.3 이상 (Single Quote 방식)
 */ */
 -- 생성 -- 생성
 CREATE FUNCTION {함수}() CREATE FUNCTION {함수}()
--- CREATE OR REPLACE FUNCTION {함수}() +RETURNS TRIGGER AS '
-RETURNS TRIGGER AS $$+
 DECLARE DECLARE
- -- 변수 선언+ {변수} {타입};
 BEGIN BEGIN
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
- RETURN NEW; -- BEFORE > INSERTUPDATE + 
- -- RETURN OLD; -- BEFORE > DELETE + RETURN NEW; -- FOR EACH ROW > BEFORE > INSERT UPDATE 
- -- RETURN NULL; -- AFTER+ -- RETURN OLD; -- FOR EACH ROW > BEFORE > DELETE 
 + -- RETURN NULL; -- FOR EACH ROW > 작업 종료 (AFTER), 작업 무효화 (BEFORE), FOR EACH STATEMENT
 END; END;
-$$ LANGUAGE plpgsql;+LANGUAGE plpgsql;
  
 CREATE TRIGGER {트리거} CREATE TRIGGER {트리거}
  {BEFORE | AFTER}  {BEFORE | AFTER}
  {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR)  {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR)
- ON {테이블}+ON {테이블}
  FOR EACH ROW -- ROW 단위  FOR EACH ROW -- ROW 단위
  -- FOR EACH STATEMENT -- STATEMENT 단위  -- FOR EACH STATEMENT -- STATEMENT 단위
줄 152: 줄 213:
 -- 삭제 -- 삭제
 DROP TRIGGER {트리거} ON {테이블}; DROP TRIGGER {트리거} ON {테이블};
-DROP FUNCTION {함수}(); -- 인자 타입 명시+DROP FUNCTION {함수}();
  
 /* /*
- PostgreSQL 8.이상+ PostgreSQL 8.이상 (Dollar Quoting 방식)
 */ */
 -- 생성 -- 생성
 CREATE FUNCTION {함수}() CREATE FUNCTION {함수}()
--- CREATE OR REPLACE FUNCTION {함수}() 
 RETURNS TRIGGER AS $$ RETURNS TRIGGER AS $$
 DECLARE DECLARE
- -- 변수 선언+ {변수} {타입};
 BEGIN BEGIN
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
- RETURN NEW; -- BEFORE > INSERTUPDATE + 
- -- RETURN OLD; -- BEFORE > DELETE + RETURN NEW; -- FOR EACH ROW > BEFORE > INSERT UPDATE 
- -- RETURN NULL; -- AFTER+ -- RETURN OLD; -- FOR EACH ROW > BEFORE > DELETE 
 + -- RETURN NULL; -- FOR EACH ROW > 작업 종료 (AFTER), 작업 무효화 (BEFORE), FOR EACH STATEMENT
 END; END;
 $$ LANGUAGE plpgsql; $$ LANGUAGE plpgsql;
줄 175: 줄 236:
 CREATE TRIGGER {트리거} CREATE TRIGGER {트리거}
  {BEFORE | AFTER}  {BEFORE | AFTER}
- {INSERT | UPDATE | DELETE | TRUNCATE} -- 중복 선택 가능 (OR) + {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR) 
- ON {테이블}+ON {테이블}
  FOR EACH ROW -- ROW 단위  FOR EACH ROW -- ROW 단위
  -- FOR EACH STATEMENT -- STATEMENT 단위  -- FOR EACH STATEMENT -- STATEMENT 단위
줄 182: 줄 243:
  
 /* /*
- PostgreSQL 9.이상+ PostgreSQL 8.이상 (Dollar Quoting 방식)
 */ */
 -- 생성 -- 생성
 CREATE FUNCTION {함수}() CREATE FUNCTION {함수}()
--- CREATE OR REPLACE FUNCTION {함수}() 
 RETURNS TRIGGER AS $$ RETURNS TRIGGER AS $$
 DECLARE DECLARE
- -- 변수 선언+ {변수} {타입};
 BEGIN BEGIN
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
- RETURN NEW; -- BEFORE > INSERTUPDATE + 
- -- RETURN OLD; -- BEFORE > DELETE + RETURN NEW; -- FOR EACH ROW > BEFORE > INSERT UPDATE 
- -- RETURN NULL; -- AFTER, INSTEAD OF+ -- RETURN OLD; -- FOR EACH ROW > BEFORE > DELETE 
 + -- RETURN NULL; -- FOR EACH ROW > 작업 종료 (AFTER), 작업 무효화 (BEFORE)FOR EACH STATEMENT
 END; END;
 $$ LANGUAGE plpgsql; $$ LANGUAGE plpgsql;
  
 CREATE TRIGGER {트리거} CREATE TRIGGER {트리거}
- {BEFORE | AFTER} -- 테이블 + {BEFORE | AFTER} 
- -- {INSTEAD OF} -- 뷰 + {INSERT | UPDATE | DELETE | TRUNCATE} -- 중복 선택 가능 (OR), TRUNCATE (STATEMENT 단위
- {INSERT | UPDATE | DELETE | TRUNCATE} -- 중복 선택 가능 (OR), TRUNCATE (테이블+ON {테이블} 
- ON {테이블/뷰+ FOR EACH ROW -- ROW 단위 
- FOR EACH ROW -- ROW 단위 (테이블/뷰) + -- FOR EACH STATEMENT -- STATEMENT 단위
- -- FOR EACH STATEMENT -- STATEMENT 단위 (테이블)+
  EXECUTE PROCEDURE {함수}();  EXECUTE PROCEDURE {함수}();
- 
--- 삭제 
-DROP TRIGGER IF EXISTS {트리거} ON {테이블/뷰}; 
-DROP FUNCTION IF EXISTS {함수}(); -- 인자 타입 명시 
  
 /* /*
- PostgreSQL 11.이상+ PostgreSQL 9.이상 (Dollar Quoting 방식)
 */ */
 -- 생성 -- 생성
 CREATE FUNCTION {함수}() CREATE FUNCTION {함수}()
--- CREATE OR REPLACE FUNCTION {함수}() 
 RETURNS TRIGGER AS $$ RETURNS TRIGGER AS $$
 DECLARE DECLARE
- -- 변수 선언+ {변수} {타입};
 BEGIN BEGIN
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
- RETURN NEW; -- BEFORE > INSERTUPDATE + 
- -- RETURN OLD; -- BEFORE > DELETE + RETURN NEW; -- FOR EACH ROW > BEFORE | INSTEAD OF > INSERT UPDATE 
- -- RETURN NULL; -- AFTER, INSTEAD OF+ -- RETURN OLD; -- FOR EACH ROW > BEFORE | INSTEAD OF > DELETE 
 + -- RETURN NULL; -- FOR EACH ROW > 작업 종료 (AFTER)작업 무효화 (BEFORE | INSTEAD OF), FOR EACH STATEMENT
 END; END;
 $$ LANGUAGE plpgsql; $$ LANGUAGE plpgsql;
줄 235: 줄 291:
  {BEFORE | AFTER} -- 테이블  {BEFORE | AFTER} -- 테이블
  -- {INSTEAD OF} -- 뷰  -- {INSTEAD OF} -- 뷰
- {INSERT | UPDATE | DELETE | TRUNCATE} -- 중복 선택 가능 (OR), TRUNCATE (테이블+ {INSERT | UPDATE | DELETE | TRUNCATE} -- 중복 선택 가능 (OR), TRUNCATE (STATEMENT 단위
- ON {테이블/뷰}+ON {테이블/뷰}
  FOR EACH ROW -- ROW 단위 (테이블/뷰)  FOR EACH ROW -- ROW 단위 (테이블/뷰)
  -- FOR EACH STATEMENT -- STATEMENT 단위 (테이블)  -- FOR EACH STATEMENT -- STATEMENT 단위 (테이블)
- EXECUTE FUNCTION {함수}();+ EXECUTE PROCEDURE {함수}(); 
 + -- EXECUTE FUNCTION {함수}(); -- PostgreSQL 11.0 이상 
 + 
 +-- 삭제 
 +DROP TRIGGER IF EXISTS {트리거} ON {테이블/뷰}; 
 +DROP FUNCTION IF EXISTS {함수}();
 </sxh> </sxh>
  
 {{tag>"쿼리" "Query" "기본" "객체"}} {{tag>"쿼리" "Query" "기본" "객체"}}