2014년 1월 18일 토요일

SQLite 설치 및 사용법


1. 다운로드 ( 현재 Version : SQLite 3.7.12 )




2. 설치하고자 하는 위치에 폴더 생성 후 압축을 풀면 됩니다.

3. SQLite Expert Personal 다운



4. Command 창에서 sqlite3.exe를 실행하면 됨.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
C:\SQLite3>sqlite3 test.db
SQLite version 3.7.12 2012-05-14 01:41:23
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .database
seq  name             file
 
---  ---------------  ----------------------------------------------------------
 
0    main             C:\SQLite3\test.db
 
sqlite> create table test (no integer primary key autoincrement, title text, date text);
sqlite> .table
test
sqlite> insert into test(title, date) values('vidio','2012-05-17-12-36');
sqlite> select * from test;
1|vidio|2012-05-17-12-36
sqlite> .header on
sqlite> .mode column
sqlite> select * from test;
no          title       date
----------  ----------  ----------------
1           vidio       2012-05-17-12-36
sqlite>.exit
 
C:\SQLite3>dir/w
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: C824-07F1
 
 C:\SQLite3 디렉터리
 
[.]                                  [..]
sqlite-dll-win32-x86-3071200.zip     sqlite-shell-win32-x86-3071200.zip
sqlite3                              sqlite3.def
sqlite3.dll                          sqlite3.exe
test.db
               7개 파일           1,658,734 바이트
               2개 디렉터리  28,745,773,056 바이트 남음

- 기타
====================================================
내부명령어와 관련된 도움말은 '''.help'''를 입력하는 정도로 간단히 참조할 수 있다.
  1. .databases : 현재 작업중인 DB파일과 관련된 다른 파일들 목록 출력
  2. .echo ON|OFF : 명령어를 반향 할건지 여부
  3. .exit : 프로그램 종료
  4. .help : 도움말
  5. .schema ?TABLE? : 테이블 구조
  6. .show : 현재 프로그램 설정값을 보여준다.
  7. .read FILENAME : FILENAME으로 부터 SQL을 실행한다.
  8. .output FILENAME : 출력을 FILENAME으로 보냄
  9. .output stdout : 출려을 화면으로 보냄(기본 값)
  10. .output stdout : 출려을 화면으로 보냄(기본 값)

5. SQLite Expert Personal 실행

SQLite의 특징 사용할 수 밖에 없는 10가지의 이유 (SQLite의 이점에 대해서)

흔히 사용되고 있는 데이터베이스는 MySQL이나 PostgreSQL이지만, 나는 개인적으로 SQLite를 좋아한다. 특히 전용서버를 가지고 있지 않고, 렌탈서버만의 환경에서는 MySQL보다 SQLite가 큰 메리트가 있다고 생각한다.

1. 데이터가 파일 하나기 때문에 백업이 간단하다.
- SQLite는 서버형이 아니기 때문에, 데이터는 단 하나의 파일에 정리되어 있다. 백업방법은 간단하다. FTP로 파일을 다운받든지, 파일 하나를 다른곳으로 카피하기만 하면 끝이다. MySQL에서도 툴을 이용하면 백업은 할 수 있지만,  파일 카피만으로 백업이 되는 간결함에는 비교할 수 없다. 파일의 확장자도 뭐든지 되고 없어도 된다. USB에 데이터파일을 카피해서 외출시에도 어디든지 바로 사용 할 수 있다. DB의 데이블 구성을 바꾸려고 할때는 서버에서 DB파일을 다운로드해서 데스크탑 툴을 이용해 변경해서 다시 업로드 시키면 끝이다. 단지 DB가 파일하나기 때문에 가능한 것이다.

2. 많은 렌탈서버의 MySQL보다 고속으로 움직인다.
- 렌탈서버의 MySQL의 느린 속도에 지쳐버리는 사람이 많다. 원래 이건 MySQL이 않좋은게 아니라, 렌탈서버의 업자가 많은 어카운트를 하나의 MySQL서버에 등록해서 사용하기 때문인 것이다. DB는 서버에 많은 부담을 주기 때문에 꽤 빠르다고 인정받는 MySQL이 엄청 느려질 때가 있다. 그에 반해 SQLite는 서버상의 자신의 공간에 놓아 두는 것만으로 렌탈중인 웹서버에서도 쾌적하게 사용 할 수 있다. 물론 MySQL처럼 부작용도 있을 수 있지만, SQLite는 서버에 부드럽게 동작하기 때문에 많은 이점이 있다. 

3. SQL기능적으로 문제가 없다.
- 기본적인 SQL문은 모두 사용한다. (SQL92표준). 뷰, 트리거도 가능하다. check컨트롤은 사용 할 수 없지만, 그것이 없는게 SQLite이다. 물론 DB스페셜리스트가 대규모사이트 등에서 사용하기는 역량이 딸리지만, 보통의 사용에서는 전혀 문제가 없다고 생각된다.

4. 설정이 용이.
- 패스워드설정이 필요 없기 때문에, MySQL을 사용했던적이 있는 사람은, '어라? 벌써 연결된건가?'라고 놀랄지도 모른다. 

5. 쉬운 판매
- 나와는 상관없는 얘기지만, 상품을 판매한다는 입장에서 봤을 때, 간이적인 DB를 사용해서 WEB시스템을 구축하고 있을 경우, 제공의 용이함은 큰 이점이 될 것이다. 왜냐면 HTML과 같은 복사->붙여넣기로 제공 할 수 있기 때문이다. 

6. PHP5에서는 SQLite3를 표준으로 사용할 수 있다. 
- PHP4에서도 SQLite2가 표준으로 사용된다. 아무것도 안해도 단지 소스코드를 작성하면 자동적으로 DB파일이 생성된다. 표준 핸들은 엄청 고마운 것이다.

7. 데이터형의 개념이 쉽고, 텍스트 길이도 유연하기 때문에 PHP와 상성이 정말 좋다.
- 많은 DB서버는 텍스트의 길이를 미리 정하지 않으면 안되는 것도 있다. SQLite에서는 chr(20)와 같은 구문은 필요없다.

8. 무료이다.
-또한 코어소스코드의 저작권도 주장하고 있지 않다. 라이선스의 걱정은 절대 없다.

9. 용량 걱정이 없다. 
-코어는 225kb밖에 차지하지 않는다.

10. ruby에서도 SQLite가 표준이 되었다.
- ruby는 사용한적이 없기 때문에 잘 모르지만..


이중에서 개인적으로 가장 좋은점은 역시 1번이라고 생각한다.

파일하나의 간편함은 더이상 말이 필요없다.




이처럼 많은 이점이 있는 SQLite, 사용하지 않을 수 없지 않은가.

SQLite 간단사용법

SQLite 간단사용법
SQLite는 오픈소스 파일 DB이다.
API도 간단해서 쉽게 사용할 수 있다.
SQLite를 간단하게 설치(설치라고 할 레벨도 아닌것 같지만)하고 CppSQLite라는 래퍼 클래스를 이용하여 제어하는 방법을 제공한다.

다운로드
 - SQLite 다운로드 : http://www.sqlite.org/download.html 에서 최신버전을 받아서 압축 해제하면 exe파일이 하나 나온다. 설치파일은 아니니 그냥 압축해제만 해놓으면 된다.


1. 데이터베이스 작성
C:\sqlite>sqlite3 DB파일명.db
(확장자는 없어도 되고 아무거나 가능하다.)
C:\sqlite>sqlite3 pokute.db


2. 테이블 작성
(정수값、2컬럼의 경우 CREATE TABLE 테이블명 컬럼1 INTEGER, 컬럼2 VARCHAR(정수));

CREATE TABLE db_list (id INTEGER, name VARCHAR(16));


3. 레코드를 추가
INSERT INTO 테이블명 (컬럼1, 컬럼2) VALUES(값1, 값2);

INSERT INTO db_list (id, name) VALUES(1, "PC");


4. 테이블의 레코드를 참조
SELECT 컬럼명 FROM 테이블명

SELECT * FROM db_list;


5. 조건식으로 데이터 검색
SELECT 컬럼명 FROM 테이블명 WHERE 조건식;

SELECT * FROM db_list WHERE id=3;


6. 레코드 정렬
SELECT 컬럼명 FROM 테이블명 ORDER BY 컬럼명;

SELECT * FROM db_list ORDER BY id;


7. 참조하는 레코드 수를 지정
SELECT 컬럼명 FROM 테이블명 LIMIT 수;

SELECT * FROM db_list LIMIT 3;


8. 레코드 변경
UPDATE 테이블명 SET 컬럼명=값 WHERE 조건식;

UPDATE db_list SET name="Printer" WHERE id=1;


9. 레코드 삭제
DELETE FROM 테이블명 WHERE 조건식;

DELETE FROM db_list WHERE id=5;


10. 테이블의 삭제
DELETE FROM 테이블명;

DELETE FROM db_list;

11. 파일로부터 데이터 입력
.import 파일명 테이블명;

.import ./db.txt new_db;


12. 백업 등、같은 구성의 테이블 작성
CREATE TABLE 새로운테이블명 AS SELECT * FROM 기존테이블명;

CREATE TABLE new_db AS SELECT * FROM db_list;


13. 테이블명 변경
ALTER TABLE 현재테이블명 RENAME TO 새로운테이블명;

ALTER TABLE db_list RENAME TO new_tb;


14. 테이블 삭제
DROP TABLE 테이블명;

DROP TABLE db_list;


15. 컬럼추가
ALTER TABLE 테이블명 ADD 추가컬럼명 테이터형;

ALTER TABLE db_list ADD price INTEGER;


16. 사용중의 데이터베이스 표시

.database


17. 작성된 테이블명 표시

.table


18. 도움말 표시

.help


19. 종료

.quit

SQLite3

01. 시작하면서…

기존에 Java로 전산시스템을 유지보수하는 일만 하다가 신규로 윈도우즈 애플리케이션을 개발 및 유지보수를 할 일이 생겨서 이것저것 공부를 하고 있습니다. 사실 리눅스 시스템과의 호환성이나 요즘 추세인 멀티플랫폼을 생각해서 Qt4와 같은 멀티플랫폼을 지원하는 프레임워크를 사용하고 싶었으나 나 혼자만 사용할 프로젝트라면 그렇게 하겠지만 회사차원에서 개발 및 유지보수를 할 것이므로 회사에서 선택한 언어인 C#을 공부하고 있습니다.
개발언어나 프레임워크를 빠르게 익히는 방법은 역시 학습용으로 작은 프로젝트를 진행해보는 것입니다. 저도 C#과 WPF를 스터디하기 위해서 간단한 스터디용 프로젝트를 진행해보려고 하는데요… 최근에 관심을 갖게된 SQLite3를 애플리케이션의 설정파일이나 데이터파일을 대체하는 용도로 사용해보려고 합니다. 기존에 Oracle이나 MySQL과 같은 RDBMS를 사용해보신 분들이라면 쉽게 사용할 수 있을 것 같더군요.

02. SQLite3 주요특징

SQLite is a in-process library that implements a self-containedserverlesszero-configuration,transactional SQL database engine
SQLite3 공식홈페이지에 About 메뉴를 클릭하면 간단한 특징이 적혀있습니다. 위의 문장을 해석하면…
SQLite는 독립적이고 서버가 불필요하며,설정이 필요없고 트랜잭션을 지원하는 SQL데이터베스 엔진으로 구현된 개발 중인 라이브러리입니다. (아.. 발번역)
위에서 독립적이라는 의미는 아마도 플랫폼 독립적이라는 것 같습니다. 요즘에 안드로이드와 같은 모바일 앱의 데이터베이스로 많이 활용되고 있는 것으로 알고 있습니다.
애플리케이션의 설정과 데이터들을 보관할 용도로는 딱인 것 같더군요. 단순한 것을 좋아하는 저에겐 다 맘에 드는 특징이었습니다. 가장 마음에 든 것은 serverless였지요. 기존에 사용하던 RDBMS와 같은 쿼리를 사용할 수 있지만 로컬서버던 원격서버던 RDBMS 서버를 구동하고 관리해야한다는 부담이 줄 수 있다는 장점이 있습니다.
일단, C#에서 설정파일 및 데이터파일로 사용하기 위해서 SQLite를 미리 알아보는 시간을 가져보려고 합니다.

03. SQLite3 설치

SQLite의 설치는 너무 간단해서 살짝 당황했습니다. 단순히 압축풀어서 원하는 위치에 풀어주면 끝입니다.(윈도우즈 시스템에서 setup.exe를 실행하는 것이 너무 익숙해서…)
공식홈페이지를 접속합니다.(아래의 스크린샷은 전부 2012.03.25일자 기준이므로 시간이 지나서 달라질 수 있음을 참고하시길 바라겠습니다.) 접속주소는 http://sqlite.org/입니다.
 메인화면을 접속하면 상단에 Dowload 메뉴를 보실 수 있습니다.
다운로드 화면을 들어가면 윈도우즈 시스템을 위해서 컴파일된 바이너리를 다운로드할 수 있습니다.
용량도 정말 작습니다. 254KB… 압축을 풀면 더 가관입니다.(실행파일 딸랑 하나…)
압축을 푼 디렉토리의 이름을 접근하기 편하게 이름을 바꿉니다.
디렉토리의 이름을 sqlite3로 변경합니다.
여기에서 뭔가 잘 못된줄 알았습니다. 너무 간단해서… 이게 설치의 마지막입니다. 사용할 준비가 완료된 것이지요. 다운받은 exe파일은 SQLite를 쉘에서 사용할 수 있도록 해주는 커맨드라인 쉘 인터페이스입니다.

04. SQLite3 실행하기

윈도우즈 상에서 SQLite3를 사용해보기 위해서는 cmd.exe를 사용합니다. Windows키 + R을 눌러서 cmd.exe를 실행합니다.
이제 cmd.exe를 실행해서 C:sqlite3로 이동합니다.
이제는 아래의 명령어를 실행해서 SQLite3를 실행합니다.
c:sqlite3> sqlite3 test.db
test.db라는 SQLite3 데이터베이스 파일명으로 지정하여 실행합니다.(해당 디렉토리를 열어보면 아직 test.db 파일은 생성되진 않았습니다.)
이제부터 입력되는 명령어나 쿼리는 SQLite용 명령어나 쿼리뿐입니다.
SQLite의 경우에는 여러 개의 database 파일을 한꺼번에 사용할 수 있습니다. .database 명령어는 그렇게 연결된 데이터베이스파일의 목록을 보여주는 명령어입니다.

테이블 생성

간단하게 테이블을 하나 생성해보겠습니다.(대소문자는 가리지 않으므로 편하게 입력하셔도 됩니다. 저는 읽기 편하도록 테이블명과 컬럼명은 소문자로 처리하였습니다.)
기존에 오라클이나 MySQL과 같은 RDBMS를 사용해보신 분이라면 쉽게 이해할 수 있을 것입니다. 테이블이 추가되었으니 .table 명령어로 확인해봅니다.
sqlite> .table
SQLite에서 쿼리를 제외한 나머지 명령어는 .(dot)로 시작합니다. 명령어의 목록은 .help를 입력하면 명령어 목록과 설명을 확인할 수 있습니다.
t1 이라는 테이블명이 출력되는 것을 확인할 수 있습니다.

데이터 추가(Insert)

이제 테이블에 데이터를 넣어보도록 하겠습니다.
테이블 생성과 마찬가지로 RDBMS를 기존에 사용해보신 분이라면 쉽게 이해하실 수 있습니다.  위에서 DATETIME 명령어는 오라클의 sysdate와 유사한 것입니다. 이제는 SELECT문을 이용해서 추가한 데이터를 조회해보도록 하겠습니다.
테이블 생성(create table), 데이터 추가(insert)와 마찬가지로 쿼리는 기존의 RDBMS와 거의 동일합니다. SELECT 문의 결과가 조회됩니다만… ‘|’ 문자열로 분리된 데이터는 조금 보기가 어렵습니다. 아래의 명령어를 이용해서 보이 좋게 바꿔봅니다.
sqlite> .header on
sqlite> .mode column
위의 명령어를 이용하면 기존의 오라클 클라이언트의 SQL*Plus와 유사하게 조회되는 것을 확인할 수 있습니다.
참고) INTEGER형의 Primary Key 컬럼
정확한 내용은 모르겠지만… 아마 Integer형으로 Primary Key로 지정하면 Auto-Increment 특징을 가지는 것 같습니다. 위와 유사한 방식으로 t1 테이블에 데이터를 2 row 추가해봤는데… 아래와 같습니다.

 05. 마치면서…

간단하게 사용해보니… 딱 제 취향입니다. 공식문서 중에 대용량 사이트의 DB로도 사용이 가능하다고 하는데… 그건 약간 회의적입니다만 애플리케이션의 설정파일을 대체하거나 데이터파일을 대체하는 것은 가능할 것 같기도 합니다.
앞으로는 C#에서 SQLite를 사용하는 법을 찾아서 직접 사용해보려고 합니다.

06. 참고문서

  1. http://www.sqlite.org/about.html
  2. http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html