SQLite - Kiểu Dữ Liệu

Xin chào, những pháp sư cơ sở dữ liệu tương lai! Hôm nay, chúng ta sẽ khám phá thế giới kỳ diệu của các kiểu dữ liệu SQLite. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - tôi sẽ là người bạn thân thiện dẫn đường cho bạn trong hành trình này, giải thích mọi thứ từng bước. Vậy, hãy lấy một tách cà phê (hoặc trà, nếu đó là sở thích của bạn), và chúng ta cùng bắt đầu!

SQLite - Data Type

Lớp Lưu Trữ SQLite

Trước hết, hãy nói về các lớp lưu trữ của SQLite. Hãy nghĩ về chúng như những khối xây dựng cơ bản của dữ liệu trong SQLite. Có năm lớp lưu trữ chính:

  1. NULL
  2. INTEGER
  3. REAL
  4. TEXT
  5. BLOB

Hãy phân tích chúng với một số ví dụ:

NULL

CREATE TABLE example (
id INTEGER,
name TEXT,
age INTEGER
);

INSERT INTO example (id, name) VALUES (1, 'Alice');

Trong ví dụ này, chúng ta đã tạo một bảng và chèn một hàng mà không xác định giá trị cho cột 'age'. SQLite tự động gán nó giá trị NULL. NULL đại diện cho sự vắng mặt của dữ liệu - nó như thể nói, "Chúng ta không biết tuổi của Alice."

INTEGER

INSERT INTO example (id, name, age) VALUES (2, 'Bob', 30);

Ở đây, chúng ta đã chèn tuổi của Bob là 30. SQLite lưu trữ này như một INTEGER. Các số nguyên là các số整数 không có phần thập phân.

REAL

CREATE TABLE products (
id INTEGER,
name TEXT,
price REAL
);

INSERT INTO products (id, name, price) VALUES (1, 'Coffee', 3.99);

Giá 3.99 được lưu trữ như một giá trị REAL, đó là cách SQLite xử lý các số thập phân.

TEXT

INSERT INTO example (id, name, age) VALUES (3, 'Charlie', '25 years old');

Dù chúng ta đang lưu trữ tuổi, nhưng ở đây chúng ta đã sử dụng TEXT. SQLite sẽ lưu trữ "25 years old" như một chuỗi ký tự.

BLOB

BLOB viết tắt của Binary Large Object. Nó được sử dụng để lưu trữ dữ liệu nhị phân như hình ảnh hoặc tệp.

CREATE TABLE files (
id INTEGER,
name TEXT,
content BLOB
);

-- Chèn một BLOB thường được thực hiện trong mã ứng dụng, không phải SQL thô

Kiểu Tương Tương SQLite

Bây giờ, hãy nói về kiểu tương tương. Đây là cách SQLite linh hoạt với các kiểu dữ liệu. Hãy tưởng tượng nó như SQLite cố gắng hiểu tốt nhất loại dữ liệu bạn muốn lưu trữ.

Có năm kiểu tương tương trong SQLite:

  1. TEXT
  2. NUMERIC
  3. INTEGER
  4. REAL
  5. BLOB

Dưới đây là bảng thú vị để cho bạn biết SQLite quyết định sử dụng哪种 tương tương:

Nếu kiểu được xác định chứa... Tương tương là...
INT INTEGER
CHAR, CLOB, TEXT TEXT
BLOB BLOB
REAL, FLOA, DOUB REAL
Bất kỳ thứ gì khác NUMERIC

Hãy xem điều này trong hành động:

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;

Điều này sẽ xuất ra:

text, integer, integer, real, blob

Chú ý cách '456' trở thành integer do tương tương NUMERIC!

Kiểu Tương Tương và Tên Kiểu

SQLite rất linh hoạt khi nói đến tên kiểu cột. Bạn có thể sử dụng các kiểu SQL tiêu chuẩn, và SQLite sẽ ánh xạ chúng đến các tương tương của nó. Dưới đây là tham khảo nhanh:

Tên Kiểu Tương Tương
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, không xác định kiểu dữ liệu BLOB
REAL, DOUBLE, DOUBLE PRECISION, FLOAT REAL
NUMERIC, DECIMAL(10,5), BOOLEAN, DATE, DATETIME NUMERIC

Kiểu Boolean

SQLite không có kiểu Boolean riêng biệt, nhưng đừng để điều đó đánh lừa bạn! Chúng ta vẫn có thể làm việc với các giá trị true/false. SQLite coi 0 là false và 1 là true.

CREATE TABLE tasks (
id INTEGER PRIMARY KEY,
description TEXT,
completed BOOLEAN
);

INSERT INTO tasks (description, completed) VALUES
('Học SQLite', 0),
('Thành thạo SQL', 1);

SELECT * FROM tasks WHERE completed = TRUE;

Điều này sẽ trả về nhiệm vụ "Thành thạo SQL" vì giá trị 'completed' của nó là 1 (true).

Kiểu Ngày và Giờ

Cuối cùng, hãy nói về ngày và giờ. SQLite không có kiểu ngày hoặc giờ内置, nhưng nó cung cấp nhiều hàm ngày và giờ để làm việc với các giá trị này.

Chúng ta thường lưu trữ ngày và giờ như TEXT, INTEGER hoặc 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
('Buổi học SQLite', '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;

Điều này sẽ xuất ra điều gì đó như:

Buổi học SQLite, 2023-06-15, 2023-06-15 00:00:00, 2023-06-15 00:00:00

Và đó là nó! Chúng ta đã bao gồm các kiểu dữ liệu chính trong SQLite, từ các lớp lưu trữ cơ bản đến các khái niệm tinh tế về tương tương. Nhớ rằng tính linh hoạt của SQLite là cả sức mạnh và điều cần lưu ý. Luôn kiểm tra dữ liệu của bạn để đảm bảo nó được lưu trữ và truy xuất như bạn mong đợi.

Thực hành là chìa khóa của sự hoàn hảo, vì vậy đừng ngần ngại thử nghiệm với các khái niệm này. Tạo bảng của riêng bạn, chèn một số dữ liệu, và xem SQLite xử lý các tình huống khác nhau như thế nào. Trước khi bạn biết điều đó, bạn sẽ trở thành một chuyên gia về kiểu dữ liệu SQLite!

Chúc mừng编码, và mong rằng cơ sở dữ liệu của bạn luôn được chuẩn hóa!

Credits: Image by storyset