개요
SQLite 라는 DBMS 에 대해서 들어본적이 있는가?
이 글은 이 프로그램을 소개하는 수준에서 마칠까 한다.
SQLite 는 DBMS 라기 보다는 Database 를 지원하는 라이브러리라고 말하는 것이 옳을 것 같다. 본인이 처음 SQLite 를 접했을때 느끼는 감정은 상당히 재미있으면서 깜찍하다는 것이었다. 이유는 그 존재의 가벼움(?), 그리고 트랜젝션까지 지원하는 생각보다는 많은 기능과 에러하나 없이 깔끔하게 설치되는 간편함, 그리고 제법 빠른 속도를 보여 준다는 것, 무엇보다 크게 맘을 끄는 것은 open source 라는 것이었다.
다음 URL 을 참조하면서 이글을 보기 바란다.
http://www.hwaci.com/sw/sqlite/index.html
설치
http://www.hwaci.com/sw/sqlite/sqlite-2.0.7.tar.gz
make all; make install;
기본적으로 /usr/local 디렉토리를 prefix 로 해서 설치된다. 설치되고 나면 멏가 라이브러리가 /usr/local/lib 로 들어가고 간단한 command line 명령어인 sqlite 라는 프로그램이 설치된다. 이는 간단한 interactive monitor 프로그램이다. 간단하게 테이블을 생성하고 기타 등등의 작업을 할수 있다.
사용법
디비 및 테이블 생성하기
디비를 따로 생성하는 명령어는 없다.
sqlite ex1
이렇게 명령어를 주면 그냥 현재의 디렉토리에 ex1 이라는 sqlite 용 데이터베이스를 생성한다. 만약 이미 ex1 이라는 데이터베이스가 존재한다면 그 데이터베이스를 오픈한다. 여기서 주의해야 할 것은 ex1 이라는 것은 하나의 독립된 파일로 존재하게 된다. 즉 디비를 본인의 계정 디렉토리에 생성하길 원한다면 sqlite ~/DB/ex1 이런식으로 경로 자체를 명시해 주도록 한다.
$ sqlite ex1
SQLite version 2.0.0
Enter ".help" for instructions
sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values('hello!',10);
sqlite> insert into tbl1 values('goodbye', 20);
sqlite> select * from tbl1;
hello!|10
goodbye|20
sqlite>
다음과 같이 여러줄에 걸쳐 SQL 명령어를 줄수도 있다.
sqlite> CREATE TABLE tbl2 (
...> f1 varchar(30) primary key,
...> f2 text,
...> f3 real
...> );
sqlite>
이들 테이블 및 디비에 관한 정보는 sqlite_master 라는 특수한 이름의 테이블 내에 저장 된다. 이들 테이블에 대해 query 를 실행하면 사용자의 테이블에 관한 정보를 얻을 수 있다.
$ sqlite ex1
SQlite vresion 2.0.0
Enter ".help" for instructions
sqlite> select * from sqlite_master;
type = table
name = tbl1
tbl_name = tbl1
rootpage = 3
sql = create table tbl1(one varchar(10), two smallint)
sqlite>
당연한 얘기이지만 이 sqlite_master 테이블은 사용자가 임의로 변경할 수 없다.
SQLite 의 특수 명령어 몇가지
sqlite> .help
.dump Dump database in a text format
.exit Exit this program
.explain Set output mode suitable for EXPLAIN
.header ON|OFF Turn display of headers on or off
.help Show this message
.indices TABLE Show names of all indices on TABLE
.mode MODE Set mode to one of "line", "column", "list", or "html"
.mode insert TABLE Generate SQL insert statements for TABLE
.output FILENAME Send output to FILENAME
.output stdout Send output to the screen
.schema ?TABLE? Show the CREATE statements
.separator STRING Change separator string for "list" mode
.tables List names all tables in the database
.timeout MS Try opening locked tables for MS milliseconds
.width NUM NUM ... Set column widths for "column" mode
sqlite>
이들에 관해서는 자세히 설명 않겠다. 따로 문서를 참조하시기 바란다.
sqlite 명령어를 shell script 에서 이용하기
$ sqlite ex1 'select * from tbl1' |
> awk '{printf "%s | %s\n",, }'
| hello | 10
| goodbye | 20
$
SQLite 에 의해 지원되는 SQL 명령어
SQLite 는 SQL92 의 subset 을 지원한다. 다음과 같은 명령어들이 지원된다.
[b]
BEGIN TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
DELETE
DROP INDEX
DROP TABLE
EXPLAIN
expression
INSERT
PRAGMA
SELECT
UPDATE
VACUUM
[/b]
각각의 테이블에는 ROWID,OID,_ROWID_ 라는 특수한 pseudocolumn 이 지원된다.
지원되는 함수에는 다음과 같은 것들이 있다.
count min max sum
avg length substr abs round
다음과 같은 연산자들이 지원된다.
* / %
+ -
<< >> & |
< <= > >=
= == != <> IN
AND
OR
다음과 같은 단항 연산자들이 지원된다.
- + ! ~
이들에 관한 자세한 사항들은 역시 문서들을 참조하시기 바란다.
C/C++ 인터페이스
C/C++ 사용자에게는 정말 희소식이라고 생각되는 것은 단순하게 하나의 구조체와 세개의 함수만을 이용한다면 SQLite 를 이용한 C/C++ 프로그램밍을 쉽게 할 수 있다는 것이다.
다음은 그 구조체와 함수의 목록이다.
typedef struct sqlite sqlite;
#define SQLITE_OK 0 /* Successful result */
sqlite *sqlite_open(const char *dbname, int mode, char **errmsg);
void sqlite_close(sqlite*);
int sqlite_exec(
sqlite*,
char *sql,
int (*)(void*,int,char**,char**),
void*,
char **errmsg
);
물론 이들 core API 외에 좀더 확장된 확장 API 함수들도 지원된다. 이것을 이용한 프로그래밍에 관한 얘기는 다음 URL 을 참조하시기 바란다.
http://www.hwaci.com/sw/sqlite/c_interface.html
이상으로 간단한 SQLite 에 관한 소개를 마치고자 한다. C/C++ 을 이용하여 정말 간단한 프로그래밍을 해야 하는 사람들이라면 굳이 무거운 MySQL/PostgreSQL 을 사용하길 권장하지 않는다. 이 SQLite 는 물론 많은 단점을 가지고 있다. 아직은 사용자 관리도 제대로 지원되지 않고 보안관련으로는 영 아니올시다 이다. 또한 넷트웍을 통한 컨넥션도 전혀 지원되지 않고 있다. 하지만 나름대로 이만한 크기로서 쓰임새가 존재한다고 생각한다.
또 다른 쓸만한 DBMS 가 나왔다는 점에서 기뻐하며 이글을 마치고자 합니다.
|
|