SQLite 클래식 튜토리얼login
SQLite 클래식 튜토리얼
작가:php.cn  업데이트 시간:2022-04-13 17:05:02

SQLite 트리거


SQLite 트리거는 데이터베이스의 콜백 함수로, 지정된 데이터베이스 이벤트가 발생할 때 자동으로 실행/호출됩니다. SQLite 트리거에 대한 주요 사항은 다음과 같습니다. SQLite Trigger(Trigger)는 데이터베이스의 콜백 함수로, 지정된 데이터베이스 이벤트가 발생하면 자동으로 실행/호출됩니다. 다음은 SQLite 트리거에 대한 주요 사항입니다.

  • SQLite의 트리거는 특정 데이터베이스 테이블에서 DELETE, INSERT 또는 UPDATE가 발생할 때 트리거되거나 하나 이상의 트리거가 발생할 때 트리거되도록 지정할 수 있습니다. 지정된 테이블의 열이 업데이트됩니다.

  • SQLite는 FOR EACH STATEMENT 트리거(트리거)가 아닌 FOR EACH ROW 트리거(트리거)만 지원합니다. 따라서 FOR EACH ROW를 명시적으로 지정하는 것은 선택 사항입니다.

  • WHEN 절과 트리거 작업은 NEW.column-nameOLD.column-name 형식을 사용하여 액세스할 수 있습니다. 삭제되거나 업데이트된 행 요소. 여기서 열 이름은 트리거와 연관된 테이블의 열 이름입니다.

  • WHEN 절이 제공되면 WHEN 절이 true인 지정된 행에 대해서만 SQL 문이 실행됩니다. WHEN 절이 제공되지 않으면 모든 행에 대해 SQL 문이 실행됩니다.

  • BEFORE 또는 AFTER 키워드는 관련 행의 삽입, 수정 또는 삭제 전 또는 후에 트리거 작업이 실행되는 시기를 결정합니다.

  • 트리거와 연결된 테이블이 삭제되면 해당 트리거(Trigger)가 자동으로 삭제됩니다.

  • 수정하려는 테이블은 트리거가 연결된 테이블이나 뷰와 동일한 데이터베이스에 존재해야 하며 tablename만 사용해야 하며 <는 사용하지 않아야 합니다. 🎜> 데이터베이스.테이블 이름.

  • 특수 SQL 함수 RAISE()를 사용하여 프로그램 내에서 발생한 예외를 트리거할 수 있습니다.

구문

트리거(Trigger)를 생성하는 기본 구문은 다음과 같습니다.

CREATE TRIGGER Trigger_name [BEFORE|AFTER] event_name
ON table_name
BEGIN
​​​​-- 트리거 로직은 여기에 있습니다....
END;
여기,

event_name은 언급된 테이블 table_name에 대한 INSERT, DELETE 및 UPDATE 데이터베이스 작업이 될 수 있습니다. 선택적으로 테이블 이름 뒤에 FOR EACH ROW를 지정할 수 있습니다.

다음은 UPDATE 작업 시 테이블의 하나 이상의 지정된 열에 트리거(Trigger)를 생성하는 구문입니다.

CREATE TRIGGER Trigger_name [BEFORE|AFTER] UPDATE OF column_name
ON table_name
BEGIN
​​​​-- 트리거 논리가 여기에 들어갑니다....
END;

새로 생성된 COMPANY 테이블에 삽입된 모든 레코드에 대해 감사 테스트를 유지하려는(또는 이미 존재하는 경우 삭제하고 다시 생성하려는) 상황을 가정해 보겠습니다.

sqlite> CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);

계속 실험적인 감사를 위해 AUDIT라는 새 테이블을 만듭니다. COMPANY 테이블에 새 레코드 항목이 있을 때마다 해당 항목에 로그 메시지가 삽입됩니다.

sqlite> CREATE TABLE AUDIT(
EMP_ID INT NOT NULL,
ENTRY_DATE TEXT NOT NULL
);

여기서 ID는 AUDIT 레코드의 ID이고, EMP_ID는 COMPANY 테이블의 ID이며, DATE는 COMPANY의 레코드가 생성되었을 때의 타임스탬프를 보유합니다. 이제 다음과 같이 COMPANY 테이블에 트리거를 생성해 보겠습니다. 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 캘리포니아 20000.0

동시에 AUDIT 테이블에 레코드가 생성됩니다. 이 레코드는 INSERT 작업 시 COMPANY 테이블에 생성한 트리거의 결과입니다. 마찬가지로 필요에 따라 UPDATE 및 DELETE 작업에 대해 트리거를 생성할 수 있습니다.

EMP_ID ENTRY_DATE
---------- ------
1 2013-04 -05 06:26:00

트리거 나열(TRIGGERS)

아래와 같이 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 문은 항목 하나만 나열합니다.

이름
----------
audit_log

트리거 삭제(TRIGGERS)

다음은 기존 트리거를 삭제하는 데 사용할 수 있는 DROP 명령입니다.

sqlite> DROP TRIGGER Trigger_name;