logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

SQLite 활용 팁 2 - 트리거 실전 사용하기

by digipine posted Nov 01, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

예를들어 사용자의 로그를 저장하다보면 일자별로 카운트를 계산할 필요가 있습니다.

간단하게 날자별로 GROUP BY 하면 되지만 레코드 갯수 증가할수록 커리 속도가 느려지게 됩니다.

이럴 경우 아래와 같이 별도의 카운트 테이블을 만들고 트리거를 정의해두면 속도가 저하될 염려가 없겠지요.

로그 데이블 샘플과 트리거 소스

CREATE TABLE [USER_LOG] (
  [NO] INTEGER PRIMARY KEY AUTOINCREMENT, 
  [REGTIME] CHAR(20) NOT NULL, 
  [UID] CHAR(14) NOT NULL, 
  [CARD_TYPE] INTERGER, 
  [GRADE] INTERGER, 
  [REISSUE] INTERGER, 
  [MODE] INTERGER, 
  [MATCHING_TYPE] INTERGER, 
  [MANAGER] INTERGER, 
  [STATUS] INTERGER, 
  [AUTH] INTERGER, 
  [KEY] INTERGER);

CREATE TRIGGER [LOG_INSERT_TRIGGER]
AFTER INSERT
ON [USER_LOG]
FOR EACH ROW
BEGIN
     INSERT INTO LOG_COUNT(REGTIME) SELECT DATE(new.REGTIME) WHERE NOT EXISTS (SELECT 1 FROM LOG_COUNT WHERE REGTIME = DATE(new.REGTIME));  /*  해당일자가 카운트 데이블이 있는지 확인해서 있으면 INSERT하지 않는다.  중복 방지 */
     UPDATE LOG_COUNT SET COUNT = COUNT + 1 WHERE DATE(new.REGTIME) = REGTIME; 
END;

CREATE TRIGGER [LOG_DELETE_TRIGGER]
BEFORE DELETE
ON [USER_LOG]
FOR EACH ROW
BEGIN
     UPDATE LOG_COUNT SET COUNT = COUNT - 1 WHERE DATE(old.REGTIME) = REGTIME; 
END;

 

카운드 저장을 위한 별도의 테이블 생성

CREATE TABLE [LOG_COUNT] (
  [NO] INTEGER PRIMARY KEY AUTOINCREMENT, 
  [REGTIME] CHAR(20) NOT NULL, 
  [COUNT] INTERGER DEFAULT 0);

TAG •

List of Articles
No. Subject Author Date Views
22 SyBase 와 JSP 연동 digipine 2017.10.28 985
21 SyBase 사용법 요약 digipine 2017.10.28 1107
20 [Oracle] SQL*Plus 개요,각종 명령어들 digipine 2017.10.28 1346
19 Choosing a free database - DB2 digipine 2017.10.29 1255
18 MS Access MDB를 위한 DB Connection String digipine 2017.10.29 1724
17 Eclipse, JSP, Beans 실습하기 digipine 2017.10.29 3143
16 Filter를 이용한 웹 프로그래밍 Filter 란 무엇인가? file siseong@naver.com 2017.10.31 4739
15 Apache Tomcat 설치후 관리자 모드 실행 되지 않을때 문제 해결방법 digipine 2017.11.01 3070
14 서블릿(Servlet) 이란 무엇인가? siseong@naver.com 2017.11.01 599
13 HTTP Multi Part Request Sample Format digipine 2017.11.01 809
12 Ubuntu에서 sqlite3 빌드 방법 digipine 2017.11.01 758
11 SQLite 활용 팁 1 - 트리거 활용하기 digipine 2017.11.01 481
» SQLite 활용 팁 2 - 트리거 실전 사용하기 digipine 2017.11.01 461
9 SQLite 활용 팁 2 - 트리거 실전 사용하기 digipine 2017.11.01 545
8 SQLite 활용 팁 3 - 다른 DB 테이블에 트리거 사용하기 digipine 2017.11.01 815
7 MySQL 5.7.x 버전 root 및 유저 암호(Password) 변경 digipine 2017.11.02 719
6 [PostgreSQL] 간단 사용법 digipine 2017.11.02 5372
5 MySQL Data Backup - Database Dump 방법 및 복구 방법 엉뚱도마뱀 2017.11.18 765
4 MySQL root 비밀번호 변경하기 (MySQL 5.7버전 이상) lizard2019 2019.06.10 3317
3 Ubuntu mySql 완전 삭제하기 lizard2019 2021.04.15 943
Board Pagination Prev 1 2 Next
/ 2