/* 테스트 테이블 생성 */
CREATE TABLE address (uid INTEGER PRIMARY KEY, name TEXT, gender INTEGER);
CREATE TABLE metadata (uid INTEGER PRIMARY KEY, man_count INTEGER, woman_count INTEGER, change_name_count INTEGER);
/* address 테이블에 DELETE 동작이 발생하였을 때, metadata 테이블을 갱신하는 트리거 생성 */
CREATE TRIGGER delete_address
DELETE ON address /* BEFORE DELETE ON address */ /* AFTER DELETE ON address */
BEGIN
UPDATE metadata SET man_count = man_count - 1 WHERE old.gender = 1; /* 남자 카운트 증가 */
UPDATE metadata SET woman_count = woman_count - 1 WHERE old.gender = 0; /* 여자 카운트 증가 */
END;
/* address 테이블에 INSERT 동작이 발생하였을 때, metadata 테이블을 갱신하는 트리거 생성 */
CREATE TRIGGER insert_address
INSERT ON address
BEGIN
UPDATE metadata SET man_count = man_count + 1 WHERE new.gender = 1; /* 남자 카운트 증가 */
UPDATE metadata SET woman_count = woman_count + 1 WHERE new.gender = 0; /* 여자 카운트 증가 */
END;
/* address 테이블의 name 필드에 UPDATE 동작이 발생하였을 때, metadata 테이블을 갱신하는 트리거 생성 */
CREATE TRIGGER update_address
UPDATE OF name ON address /* BEFORE UPDATE OF name ON address */
BEGIN
UPDATE metadata SET change_name_count = change_name_count + 1; /* 이름변경 카운트 증가 */
END;
/* metadata 테이블에 기본 행(Row) 추가 */
INSERT INTO metadata VALUES (1, 0, 0, 0); /* address 테이블에 남자(gender=1) 셋, 여자(gender=0) 셋 추가 */
INSERT INTO address(name, gender) VALUES ('James', 1); /* insert_address 트리거 (남자 카운트 증가) */
INSERT INTO address(name, gender) VALUES ('Richard', 1); /* insert_address 트리거 (남자 카운트 증가) */
INSERT INTO address(name, gender) VALUES ('Daniel', 1); /* insert_address 트리거 (남자 카운트 증가) */
INSERT INTO address(name, gender) VALUES ('Jane', 0); /* insert_address 트리거 (여자 카운트 증가) */
INSERT INTO address(name, gender) VALUES ('Suzan', 0); /* insert_address 트리거 (여자 카운트 증가) */
INSERT INTO address(name, gender) VALUES ('Alice', 0); /* insert_address 트리거 (여자 카운트 증가) */
DELETE FROM address WHERE name='Daniel';
UPDATE address SET name='Jane Junior' WHERE name='Jane';