English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
SQLite 트리거는 데이터베이스 콜백 함수로, 지정된 데이터베이스 이벤트가 발생할 때 자동으로 실행됩니다/이 함수들을 호출합니다. SQLite 트리거에 대한 주요 사항은 다음과 같습니다-
SQLite 트리거(트리거)는 특정 데이터베이스 테이블에서 DELETE, INSERT 또는 UPDATE가 발생할 때나, 하나 또는 여러 개의 지정된 테이블의 열이 업데이트될 때 트리거를 발생시킬 수 있습니다.
SQLite은 FOR EACH ROW 트리거(트리거)만 지원하며, FOR EACH STATEMENT 트리거(트리거)는 없습니다. 따라서 FOR EACH ROW를 명확히 지정하는 것은 선택사항입니다.
WHEN 절과 트리거(Trigger) 액션은 사용할 수 있는 형식을 통해 접근할 수 있습니다. NEW.column-name 또는 OLD.column-name 참조插入、删除或更新的行元素,其中 column-name은 트리거와 관련된 테이블의 열 이름입니다.
WHEN 절이 제공되면, WHEN 절이 참인 지정된 행에만 SQL 문장을 실행합니다. WHEN 절이 제공되지 않으면 모든 행에 대해 SQL 문장을 실행합니다.
BEFORE 또는 AFTER 키워드는 트리거 액션을 언제 실행할지 결정합니다. 이는 관련 행의 삽입, 수정 또는 제거 전 또는 후에 트리거 액션을 실행하는지 결정합니다.
트리거와 관련된 테이블이 제거될 때, 자동으로 트리거(Trigger)가 제거됩니다.
수정할 테이블은 트리거가 추가된 테이블이나 뷰와 같은 동일한 데이터베이스에 존재해야 하며, 트리거가 추가된 테이블이나 뷰로만 사용해야 합니다. tablename와 대신 database.tablename。
특수 SQL 함수 RAISE()는 트리거 프로그램 내에서 예외를 표출할 수 있습니다.
트리거를 생성하는 기본 문법은 다음과 같습니다.
CREATE TRIGGER trigger_name [BEFORE|AFTER] event_name ON table_name BEGIN -- 트리거 로직.... END;
여기서는,event_name위의 테이블에 대한INSERT, DELETE또는UPDATE데이터베이스 작업table_name。테이블 이름 뒤에 FOR EACH ROW를 지정할 수 있습니다.
다음은 테이블의 하나 또는 여러 개의 지정된 열에서 UPDATE 작업에 대한 트리거를 생성하는 문법입니다.
CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name ON table_name BEGIN -- 트리거 로직은 여기서.... END;
우리가 COMPANY 테이블에 삽입하는 각 레코드에 감사 시험을 수행하고자 하는 경우를 고려해 보겠습니다. 이는 우리가 새로 만든 것입니다. 다음과 같이(이미 있으면 COMPANY 테이블을 제거합니다).
sqlite> CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
감사 시험 상태를 유지하기 위해 COMPANY 테이블에 새로운 기록이 있는 경우 AUDIT라는 새로운 테이블을 생성하여 로그 메시지를 삽입합니다.
sqlite> CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL );
여기서 ID는 AUDIT 기록 ID이며, EMP_ID는 COMPANY 테이블에서 오는 ID이며, DATE는 COMPANY 테이블에 기록을 생성할 때 시간 표시를 유지합니다. 지금 COMPANY 테이블에 트리거를 생성하는 예를 들어:
sqlite> CREATE TRIGGER audit_log AFTER INSERT ON COMPANY BEGIN INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now')); END;
이제, 실제 작업을 시작하겠습니다. COMPANY 테이블에 기록을 삽입하여 AUDIT 테이블에 감사 로그 기록이 생성되도록 하겠습니다. COMPANY 테이블에 기록을 생성하는 예를 들어:-
sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 );
이렇게 하면 COMPANY 테이블에 일련의 기록이 생성됩니다. 예를 들어:-
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0
AUDIT 테이블에 일련의 기록이 생성됩니다. 이 기록은 COMPANY 테이블에 INSERT 작업을 수행한 트리거의 결과입니다. 마찬가지로 필요에 따라 UPDATE와 DELETE 작업에 트리거를 생성할 수 있습니다.
EMP_ID ENTRY_DATE ---------- ------------------- 1 2013-04-05 06:26:00
이렇게 하면sqlite_master테이블에 나열된 모든 트리거는 다음과 같습니다:
sqlite> SELECT name FROM sqlite_master; WHERE type = 'trigger';
위의 SQLite 문은 다음과 같이 하나의 항목만 나열됩니다:-
name ---------- audit_log
특정 테이블에 대한 트리거를 나열하려면 AND 절과 테이블 이름을 사용하십시오. 예를 들어:
sqlite> SELECT name FROM sqlite_master; WHERE type = 'trigger' AND tbl_name = 'COMPANY';
위의 SQLite 문장은 다음과 같이 단일 항목만 나타낼 것입니다.-
name ---------- audit_log
아래는 DROP 명령어입니다. 기존 트리거를 제거할 수 있습니다.
sqlite> DROP TRIGGER trigger_name;