SQLite - 데이터 타입
안녕하세요, 미래의 데이터 마법사 여러분! 오늘 우리는 SQLite 데이터 타입의 fascineting 세상으로 뛰어들어 보겠습니다. 프로그래밍에 처음이라면 걱정 마세요 - 이 여정에서 여러분의 친절한 안내자로서 모든 것을 단계별로 설명해 드릴게요. 그럼 커피(또는 차, 그게 여러분의 취향이라면요) 한 잔을 들고, 시작해 보겠습니다!
SQLite 저장 클래스
먼저, SQLite 저장 클래스에 대해 이야기해 보겠습니다. 이 것들은 SQLite에서 데이터의 기본적인 구성 요소라고 생각해 주세요. 다섯 가지 주요 저장 클래스가 있습니다:
- NULL
- INTEGER
- REAL
- TEXT
- BLOB
이这些东西들을 몇 가지 예제를 통해 알아보겠습니다:
NULL
CREATE TABLE example (
id INTEGER,
name TEXT,
age INTEGER
);
INSERT INTO example (id, name) VALUES (1, 'Alice');
이 예제에서 우리는 테이블을 생성하고 'age' 열이 지정되지 않은 행을 삽입했습니다. SQLite는 자동으로 NULL 값을 할당합니다. NULL은 데이터가 없음을 나타냅니다 - "Alice의 나이를 몰라요"라고 말하는 것과 같습니다.
INTEGER
INSERT INTO example (id, name, age) VALUES (2, 'Bob', 30);
여기서 우리는 Bob의 나이를 30으로 삽입했습니다. SQLite는 이를 INTEGER로 저장합니다. 정수는 소수점이 없는 전체 숫자입니다.
REAL
CREATE TABLE products (
id INTEGER,
name TEXT,
price REAL
);
INSERT INTO products (id, name, price) VALUES (1, 'Coffee', 3.99);
가격 3.99는 REAL 값으로 저장됩니다. REAL은 SQLite가 소수점 숫자를 처리하는 방법입니다.
TEXT
INSERT INTO example (id, name, age) VALUES (3, 'Charlie', '25 years old');
이제 나이를 저장하고 있지만, TEXT를 사용했습니다. SQLite는 "25 years old"를 문자열로 저장합니다.
BLOB
BLOB은 Binary Large Object의 약자로, 이미지나 파일과 같은 이진 데이터를 저장하는 데 사용됩니다.
CREATE TABLE files (
id INTEGER,
name TEXT,
content BLOB
);
-- BLOB을 삽입하는 것은 일반적으로 애플리케이션 코드에서, 원시 SQL이 아닌 방식으로 수행됩니다.
SQLite 친화 타입
이제 친화 타입에 대해 이야기해 보겠습니다. 친화 타입은 SQLite가 데이터 타입에 대해 유연성을 가지는 방법입니다. SQLite가 데이터를 저장하려는 타입을 최선을 다해 이해하려는 것을 상상해 보세요.
SQLite에는 다섯 가지 친화 타입이 있습니다:
- TEXT
- NUMERIC
- INTEGER
- REAL
- BLOB
다음 표를 통해 SQLite가 어떤 친화 타입을 사용할지 결정하는 방법을 보여드리겠습니다:
선언된 타입에 포함된 내용 | 친화 타입은... |
---|---|
INT | INTEGER |
CHAR, CLOB, TEXT | TEXT |
BLOB | BLOB |
REAL, FLOA, DOUB | REAL |
그 외의 것 | NUMERIC |
이제 실제로 보겠습니다:
CREATE TABLE affinity_example (
a TEXT,
b NUMERIC,
c INTEGER,
d REAL,
e BLOB
);
INSERT INTO affinity_example VALUES
('123', '456', '789', '101112', x'ABCDEF');
SELECT typeof(a), typeof(b), typeof(c), typeof(d), typeof(e) FROM affinity_example;
이 출력은 다음과 같습니다:
text, integer, integer, real, blob
'456'가 NUMERIC 친화 타입으로 인해 정수로 변환된 것을 주목하세요!
SQLite 친화 타입과 타입 이름
SQLite는 열 타입 이름에 대해 매우 유연합니다. 표준 SQL 타입을 사용할 수 있으며, SQLite는 그것을 자신의 친화 타입으로 매핑합니다. 다음은 빠른 참조입니다:
타입 이름 | 친화 타입 |
---|---|
INT, INTEGER, TINYINT, SMALLINT, MEDIUMINT, BIGINT, UNSIGNED BIG INT, INT2, INT8 | INTEGER |
CHARACTER(20), VARCHAR(255), VARYING CHARACTER(255), NCHAR(55), NATIVE CHARACTER(70), NVARCHAR(100), TEXT, CLOB | TEXT |
BLOB, 타입이 지정되지 않음 | BLOB |
REAL, DOUBLE, DOUBLE PRECISION, FLOAT | REAL |
NUMERIC, DECIMAL(10,5), BOOLEAN, DATE, DATETIME | NUMERIC |
Boolean 데이터 타입
SQLite에는 별도의 Boolean 타입이 없지만, 그렇다고 속지 마세요! 우리는 여전히 참/거짓 값을 처리할 수 있습니다. SQLite는 0을 거짓으로, 1을 참으로 간주합니다.
CREATE TABLE tasks (
id INTEGER PRIMARY KEY,
description TEXT,
completed BOOLEAN
);
INSERT INTO tasks (description, completed) VALUES
('Learn SQLite', 0),
('Master SQL', 1);
SELECT * FROM tasks WHERE completed = TRUE;
이 명령은 'completed' 값이 1(참)인 "Master SQL" 작업을 반환합니다.
날짜와 시간 데이터 타입
마지막으로 날짜와 시간에 대해 이야기해 보겠습니다. SQLite에는 내장된 날짜나 시간 타입이 없지만, 날짜와 시간 값을 처리할 수 있는 여러 가지 함수를 제공합니다.
우리는 일반적으로 TEXT, INTEGER, 또는 REAL로 날짜와 시간을 저장합니다:
CREATE TABLE events (
id INTEGER PRIMARY KEY,
name TEXT,
date_text TEXT,
date_int INTEGER,
date_real REAL
);
INSERT INTO events (name, date_text, date_int, date_real) VALUES
('SQLite Workshop', '2023-06-15', 1686787200, 1686787200.0);
SELECT name,
date_text,
datetime(date_int, 'unixepoch') as date_from_int,
datetime(date_real, 'unixepoch') as date_from_real
FROM events;
이 출력은 다음과 같습니다:
SQLite Workshop, 2023-06-15, 2023-06-15 00:00:00, 2023-06-15 00:00:00
이제 SQLite의 주요 데이터 타입과 친화 타입, 그리고 날짜와 시간 처리에 대해 다루었습니다. SQLite의 유연성은 그 강점이자 주의해야 할 점입니다. 항상 데이터를 저장하고检索하는 것을 테스트하여 예상과 일치하는지 확인하세요.
실습이 완벽함을 알기 위해 이 개념들을 실험해 보세요. 자신만의 테이블을 만들고 데이터를 삽입하여 SQLite가 다양한 시나리오를 어떻게 처리하는지 확인해 보세요. 언제나 데이터베이스가 규범화되기를 바랍니다!
happy coding, and may your databases always be normalized!
Credits: Image by storyset