database.sarang.net
UserID
Passwd
Database
ㆍDBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DBMS Columns 54 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 54
SQLite 2.0
작성자
정재익(advance)
작성일
2001-11-03 22:36
조회수
6,198
첨부파일: sqlite-2.0.7.tar.gz (592,643bytes)

개요

 

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",, }'
hello10
goodbye20 $

 

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 가 나왔다는 점에서 기뻐하며 이글을 마치고자 합니다.

[Top]
No.
제목
작성자
작성일
조회
114기지개 펴는 객체 데이터베이스
정재익
2001-12-03
5557
100Linux May Be More Ready Than You Think
정재익
2001-11-29
3490
85Entity Relationship Modeling from an ORM Perspective: Part 1 -- By Dr. Terry Halpin
정재익
2001-11-19
4084
54SQLite 2.0
정재익
2001-11-03
6198
53SHORE
정재익
2001-11-03
3460
32Open source Database 가 충분하지 못할 때
정재익
2001-10-23
3599
27전세계적으로 활동중인 DB Research Group
정재익
2001-10-20
3053
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다