티스토리 뷰

Data Base/SQLite

SQLite3의 몇가지 특이한 점.

Rusi(루시) 2009. 8. 13. 10:49
반응형

SQLite3은 일반적으로 우리가 알고 있는 데이터베이스와 다른 몇 가지 특징들을 가진다.

1. Manifest typing
    Manifest typing에서는 데이터 타입은 컬럼의 속성이 아닌 컬럼에 저장된 값 자체에 대한 속성이다. SQLite는 컬럼에 선언된 
    데이터 타입과 관계없이 다른 데이터 타입의 값을 저장하는 것을 허용한다.

    sqlite> CREATE TABLE tbl_test (One INTEGER, Two INTEGER);

    sqlite> INSERT INTO tbl_test VALUES (123, 456);  OK
    sqlite> INSERT INTO tbl_test VALUES (123, 456.7); OK
    sqlite> INSERT INTO tbl_test VALUES (123, 456.0); OK
    sqlite> INSERT INTO tbl_test VALUES (123, '456'); OK
    sqlite> INSERT INTO tbl_test VALUES (123, '456two'); OK
    sqlite> INSERT INTO tbl_test VALUES (123, 'ant'); OK
    sqlite> INSERT INTO tbl_test VALUES (123, ant);  FAILED


2. Variable-length records
입력한만큼만 공간이 할당됨을 의미한다. 예를 들어 VARCHAR(100)인 컬럼에 1개의 문자만 입력했다면 1바이트만큼의 공간만 할당이 된다.


3. SQL Features That SQLite Does Not Implement
    a. FOREIGN KEY constraints : 문법적으로 오류를 발생시키진 않으나 실행시간에 무시됨.
    b. Complete trigger support
    c. Complete ALTER TABLE support : RENAME TABLE과 ADD COLUMN만 지원함. DROP COLUMN, ALTER COLUMN, 
        ADD CONSTRAINT는 지원하지 않음.
    d. RIGHT and FULL OUTER JOIN : LEFT OUTER JOIN만 지원함.
    e. Writing to Views
    f . GRANT and REVOKE


4. Datatypes In SQLite Version 3 - Storage Class
    a. NULL            NULL value
    b. INTEGER       1, 2, 3, 4, 6 or 8 bytes signed integer
    c. REAL            floating point value (8 bytes)
    d. TEXT            text string (encoding : UTF-8, UTF-16BE or UTF-16LE)
    e. BLOB            입력된 값 그대로 바이너리로 저장됨.


5. Datatypes In SQLite Version 3 - Column Affinity
    일반적으로 다른 SQL database engine들은 static data type을 제공하지만, SQLite는 dynamic data types을 제공한다.
    각각의 column은 다음과 같은 type affinity를 가진다.
    a. TEXT            NULL, TEXT, BLOB storage class 가능
    b. NUMERIC      모든 storage class 가능
    c. INTEGER       NUMERIC과 같으나, real value의 경우 INTEGER storage class로 저장됨.
    d. REAL            NUMERIC과 같으나, integer value를 floating point로 강제 전환.
    e. NONE            특정 storage class를 선호하지 않는다. storage class를 강제로 변환하지 않는다. 


6. Datatypes In SQLite Version 3 - Determination of column affinity
    a. 데이터 타입에 "INT"가 포함되면, INTEGER affinity 할당
    b. 데이터 타입에 "CHAR", "CLOB" or "TEXT"가 포함되면, TEXT affinity 할당
    c. 데이터 타입에 "BLOB"가 포함되거나 데이터 타입을 지정하지 않으면 NONE affinity 할당
    d. 데이터 타입에 "REAL", "FLOA" or "DOUB"가 포함되면 REAL affinity 할당
    e. 그 외에는 NUMERIC


7. Datatypes In SQLite Version 3 -  Column affinity example
    CREATE TABLE t1(
        t  TEXT,
        nu NUMERIC, 
        i  INTEGER,
        no BLOB
    );

    -- Storage classes for the following row:
    -- TEXT, REAL, INTEGER, TEXT
    INSERT INTO t1 VALUES('500.0', '500.0', '500.0', '500.0');

    -- Storage classes for the following row:
    -- TEXT, REAL, INTEGER, REAL
    INSERT INTO t1 VALUES(500.0, 500.0, 500.0, 500.0);    



* 이슈 사항
    a. SQLite는 기본적으로 UTF-8과 UTF-16을 지원한다. 따라서 UTF-8이 아닌 ansi를 사용할 경우 문제가 발생할 수 있다.
        (참조 : http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=839)

    b. SQLite는 insert를 할 때마다 자동으로 트랜잭션이 걸린다고 한다. 따라서 많은 수의 데이터를 한번에 입력할 때에는 
        insert가 모두 끝난 후 트랜잭션 처리를 하도록 해야한다.(delete / update의 경우 확인은 안해봤지만 동일할거라 생각됨)
        (참조 : http://www.jamsun2.com/zbxe/?mid=study&listStyle=webzine&document_srl=88071
        http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8200&page=1)



SQLite3 join 관련 자료 찾다가 참고할 내용이 많아서 캡쳐 : http://ysbulpe.egloos.com/2282868
반응형

'Data Base > SQLite' 카테고리의 다른 글

SQLite Connection C#  (0) 2011.09.07
sqlite full outer join(wiki에서 발췌)  (0) 2009.08.13
SQLiteSpy  (0) 2009.08.11
SQLite 간략 소개  (0) 2009.08.11
SQLite & JAVA  (0) 2009.08.11
공지사항