우잉's Development

SQLite3_ trigger 트리거 본문

개발/SQLite3

SQLite3_ trigger 트리거

우잉이 2021. 12. 31. 11:09
728x90
반응형

1. Trigger 생성

Trigger : 특정 테이블의 데이터가 수정되면 동시에 다른 테이블의 데이터를 수정하고 싶은 경우 사용되는 것.

CREATE TRIGGER 트리거명 [ BEFORE | AFTER| INSTEAD OF ]
{ DELETE | UPDATE [OF 컬럼명, ...] | INSERT } ON 테이블명
[ FOR EACH ROW | FOR EACH STATEMENT ]
[ WHERE 조건식 ]
BEGIN
    SQL문1;
    SQL문2;
    ...
END;

SQL 문은 DELETE문, INSERT문, DELETE문이 있다.

UPDATE가 발생했을 때는 다음과 같이 작성할 수 있다.

CREATE TRIGGER 트리거명 UPDATE ON 테이블명
BEGIN
    SQL문1;
    SQL문2;
    ...
END;

또한 특정 컬럼에 UPDATE수행할 때 아래와 같이 작성할 수 있다.

CREATE TRIGGER 트리거명 UPDATE OF 컬럼명 ON 테이블명
BEGIN
    SQL문1;
    SQL문2;
    ...
END;

DELETE와 INSERT문이 시행 될때는 UPDATE부분만 DELETE와 INSERT문으로 변경해주면 된다.

실제로 만들어 보겠습니다.

위에는 product 테이블에 데이터를 추가/삭제/수정 되었을 때 각 트리거가 실행되어 log테이블 act컬럼에 

로그를 기록한다는 트리거를 작성했다. 그러면 product 테이블에 데이터를 추가하거나 데이터를 수정하거나 

삭제했을 때, 트리거가 실행되었는지 확인한다. 

일단, 데이터를 추가후 log테이블 확인 해보겠다.

데이터를 추가하고 수정하고 지우면 log에 입력이 되는걸 확인할 수 있다.

 

2. BEFORE 트리거와 AFTER 트리거 

데이터가 추가되었을 때에 실행되는 트리거를 생성하는 경우에는 먼저 데이터가 추가되고 나서 트리거에 

설정된 SQL문이 실행되지만, BEFORE키워드를 지정하면 데이터 추가되기 전에 먼저 트리거에 작성된

SQL문이 시행된후에 데이터의 추가가 된다. (AFTER도 작성할 수 있지만, 기본동작이기 때문에 명시적으로 

작성할 필요가 없다.)

CREATE TRIGGER 트리거명 BEFORE INSERT ON 테이블명
BEGIN
   SQL문;
   SQL문;
   ...
END;

3.  수정 이전과 이후의 데이터 값을 트리거에서 참조 

NEW.컬럼명 과 OLD.컬럼명

NEW.컬럼명
OLD.컬럼명

테이블에 포함 된 데이터의 값을 수정 할 때 다른 테이블에 포함 된 같은 값도 동시에 수정하려는 경우

등에 사용할 수 있다. 간단한 예로 살펴보자.

4. 트리거 스키마(구조) 확인

.mode line
select * from sqlite_master where type = 'trigger';
혹은
.schema

5. 트리거 삭제 

DROP TRIGGER 트리거명;

.schema로 mytrigger 있는것을 확인후 트리거 삭제 하고 .schema확인해보니 사라진것을 볼 수 있다.

 

728x90
반응형

'개발 > SQLite3' 카테고리의 다른 글

SQLite3_SELECT 절과 ORDER BY절  (0) 2022.01.05
SQLite3_데이터 추가와 수정, 삭제  (0) 2022.01.04
SQLite3_Index 인덱스  (0) 2021.12.31
SQLite3_View 뷰  (0) 2021.12.29
SQLite3_Table 2_제약 조건2  (0) 2021.12.29
Comments