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 MySQL 시작할때 No directory, logging in with HOME=/ 에러 해결 방법, 홈 디렉토리 변경 digipine 2021.05.06 1133
21 Docker를 통한 MySQL 설치하기 lizard2019 2021.04.15 871
20 Ubuntu mySql 완전 삭제하기 lizard2019 2021.04.15 1168
19 MySQL root 비밀번호 변경하기 (MySQL 5.7버전 이상) lizard2019 2019.06.10 3543
18 MySQL Data Backup - Database Dump 방법 및 복구 방법 엉뚱도마뱀 2017.11.18 1050
17 [PostgreSQL] 간단 사용법 digipine 2017.11.02 5531
16 MySQL 5.7.x 버전 root 및 유저 암호(Password) 변경 digipine 2017.11.02 875
15 SQLite 활용 팁 3 - 다른 DB 테이블에 트리거 사용하기 digipine 2017.11.01 948
14 SQLite 활용 팁 2 - 트리거 실전 사용하기 digipine 2017.11.01 674
» SQLite 활용 팁 2 - 트리거 실전 사용하기 digipine 2017.11.01 573
12 SQLite 활용 팁 1 - 트리거 활용하기 digipine 2017.11.01 611
11 Ubuntu에서 sqlite3 빌드 방법 digipine 2017.11.01 926
10 HTTP Multi Part Request Sample Format digipine 2017.11.01 912
9 서블릿(Servlet) 이란 무엇인가? siseong@naver.com 2017.11.01 757
8 Apache Tomcat 설치후 관리자 모드 실행 되지 않을때 문제 해결방법 digipine 2017.11.01 3281
7 Filter를 이용한 웹 프로그래밍 Filter 란 무엇인가? file siseong@naver.com 2017.10.31 4902
6 Eclipse, JSP, Beans 실습하기 digipine 2017.10.29 3313
5 MS Access MDB를 위한 DB Connection String digipine 2017.10.29 1943
4 Choosing a free database - DB2 digipine 2017.10.29 1471
3 [Oracle] SQL*Plus 개요,각종 명령어들 digipine 2017.10.28 1484
Board Pagination Prev 1 2 Next
/ 2