Chuyển đến nội dung chính

Cơ sở dữ liệu SQLite

SQLite là một database engine độc lập, dựa trên file. Khác với MySQL hoặc PostgreSQL, SQLite không yêu cầu server - toàn bộ database được lưu trữ trong một file duy nhất trên Mac của bạn.

Thiết lập nhanh

1

Mở Form kết nối

Click New Connection từ màn hình Welcome hoặc File > New Connection
2

Chọn SQLite

Chọn SQLite từ danh sách loại cơ sở dữ liệu
3

Chọn file Database

Click Browse và chọn file .sqlite, .db, hoặc .sqlite3 của bạn
4

Tạo kết nối

Đặt tên cho kết nối và click Create

Cài đặt kết nối

Kết nối SQLite rất đơn giản vì không có server:
TrườngMô tả
NameTên thân thiện cho kết nối này
File PathĐường dẫn đầy đủ đến file database SQLite
SQLite connection
Không cần username, password hoặc cài đặt mạng cho database SQLite.

Vị trí SQLite phổ biến

Database ứng dụng

Nhiều ứng dụng macOS sử dụng SQLite:
Ứng dụngVị trí Database
Safari~/Library/Safari/History.db
Photos~/Pictures/Photos Library.photoslibrary/database/Photos.sqlite
Messages~/Library/Messages/chat.db
Notes~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite
Database hệ thống có thể bị khóa khi ứng dụng cha đang chạy. Thoát ứng dụng trước khi mở database của nó.

Database phát triển

Vị trí database phát triển phổ biến:
# Ruby on Rails
./db/development.sqlite3

# Django
./db.sqlite3

# iOS Simulator
~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/Documents/*.sqlite

# Core Data
*.sqlite (trong container của app)

Tạo Database mới

Để tạo database SQLite mới:
  1. Tạo kết nối mới
  2. Nhập đường dẫn cho file chưa tồn tại
  3. TablePro sẽ tạo file khi bạn kết nối
Hoặc sử dụng command line:
sqlite3 ~/Documents/newdatabase.sqlite "SELECT 1;"

Tính năng

Trình duyệt Database

Sidebar hiển thị tất cả bảng và views trong database SQLite của bạn:
SQLite browser

Thông tin bảng

Cho mỗi bảng, TablePro cung cấp:
  • Structure: Tên cột, kiểu và constraints
  • Indexes: Tất cả indexes bao gồm UNIQUE constraints
  • DDL: Câu lệnh CREATE TABLE

Bảng hệ thống SQLite

TablePro có thể hiển thị các bảng nội bộ của SQLite:
BảngMục đích
sqlite_masterThông tin schema
sqlite_sequenceTheo dõi AUTOINCREMENT

Thực thi truy vấn

Thực thi truy vấn với hỗ trợ đầy đủ cú pháp SQLite:
-- JSON functions (SQLite 3.38+)
SELECT json_extract(data, '$.name') as name
FROM users
WHERE json_extract(data, '$.active') = true;

-- Window functions
SELECT
    category,
    product,
    price,
    rank() OVER (PARTITION BY category ORDER BY price DESC) as rank
FROM products;

-- CTEs
WITH RECURSIVE
    cnt(x) AS (
        SELECT 1
        UNION ALL
        SELECT x+1 FROM cnt WHERE x < 10
    )
SELECT x FROM cnt;

-- Full-text search (nếu FTS được bật)
SELECT * FROM documents WHERE documents MATCH 'sqlite AND database';

-- UPSERT (INSERT OR REPLACE)
INSERT INTO settings (key, value)
VALUES ('theme', 'dark')
ON CONFLICT(key) DO UPDATE SET value = excluded.value;

Kiểu dữ liệu SQLite

SQLite sử dụng hệ thống kiểu động với type affinity:
AffinityMô tảVí dụ
TEXTDữ liệu chuỗiVARCHAR, TEXT, CLOB
INTEGERSigned integerINT, INTEGER, BIGINT
REALFloating pointREAL, DOUBLE, FLOAT
NUMERICNumeric hoặc textDECIMAL, BOOLEAN, DATE
BLOBBinary dataBLOB, raw bytes
SQLite chấp nhận bất kỳ kiểu dữ liệu nào trong bất kỳ cột nào (trừ INTEGER PRIMARY KEY). Kiểu là gợi ý, không phải constraint.

Làm việc với file lớn

Kích thước file

Database SQLite có thể phát triển khá lớn. TablePro xử lý:
  • Database lên đến vài GB
  • Bảng với hàng triệu dòng
  • Dữ liệu BLOB (hình ảnh, files)

Mẹo hiệu năng

  1. Sử dụng phân trang: Bật phân trang trong settings cho bảng lớn
  2. Thêm indexes: Tạo indexes cho các cột được query thường xuyên
  3. Sử dụng LIMIT: Luôn giới hạn result sets khi khám phá
  4. Vacuum định kỳ: Thu hồi không gian với VACUUM
-- Kiểm tra kích thước database
SELECT page_count * page_size as size FROM pragma_page_count(), pragma_page_size();

-- Phân tích bảng cho tối ưu hóa query
ANALYZE;

-- Thu hồi không gian không dùng
VACUUM;

Khắc phục sự cố

Database is Locked

Triệu chứng: “database is locked” hoặc “database table is locked” Nguyên nhân:
  • Ứng dụng khác đang mở database
  • Truy vấn trước đó vẫn đang chạy
  • Xung đột chế độ Write-ahead logging (WAL)
Giải pháp:
  1. Đóng các ứng dụng khác sử dụng database
  2. Chờ các truy vấn đang chạy hoàn thành
  3. Kiểm tra các file WAL:
    ls -la /path/to/database.sqlite*
    # Bạn có thể thấy: database.sqlite-wal, database.sqlite-shm
    

Cannot Open Database

Triệu chứng: “unable to open database file” Nguyên nhân và Giải pháp:
  1. File không tồn tại: Xác minh đường dẫn chính xác
  2. Permission denied: Kiểm tra quyền file
    ls -la /path/to/database.sqlite
    chmod 644 /path/to/database.sqlite
    
  3. Đường dẫn chứa ký tự đặc biệt: Sử dụng đường dẫn tuyệt đối không có khoảng trắng

Corrupt Database

Triệu chứng: “database disk image is malformed” Tùy chọn khôi phục:
  1. Kiểm tra tính toàn vẹn:
    PRAGMA integrity_check;
    
  2. Thử khôi phục:
    sqlite3 corrupt.sqlite ".recover" | sqlite3 recovered.sqlite
    
  3. Khôi phục từ backup (nếu có)

Thay đổi Schema không hiển thị

Triệu chứng: Bảng hoặc cột bạn tạo không hiển thị Giải pháp: Làm mới kết nối:
  1. Right-click kết nối
  2. Chọn Refresh
Hoặc ngắt kết nối và kết nối lại.

SQLite Pragmas

TablePro hỗ trợ lệnh PRAGMA SQLite cho cấu hình:
-- Kiểm tra phiên bản SQLite
SELECT sqlite_version();

-- Hiển thị thông tin bảng
PRAGMA table_info(users);

-- Kiểm tra foreign keys có được bật không
PRAGMA foreign_keys;

-- Bật thực thi foreign key
PRAGMA foreign_keys = ON;

-- Kiểm tra chế độ journal
PRAGMA journal_mode;

-- Sử dụng chế độ WAL cho đồng thời tốt hơn
PRAGMA journal_mode = WAL;

Backup và Restore

Backup thủ công

Database SQLite chỉ là files. Để backup:
# Copy đơn giản (đảm bảo database không được ghi)
cp database.sqlite database-backup.sqlite

# Lệnh backup SQLite (an toàn hơn, xử lý locks)
sqlite3 database.sqlite ".backup backup.sqlite"

Export sang SQL

Export database của bạn dưới dạng SQL statements:
sqlite3 database.sqlite .dump > backup.sql

Restore từ SQL

sqlite3 newdatabase.sqlite < backup.sql

Khác biệt với Server Databases

Tính năngSQLiteMySQL/PostgreSQL
Yêu cầu serverKhông
Multiple connectionsGiới hạnKhông giới hạn
Xác thực người dùngKhông
Truy cập mạngDựa trên fileTCP/IP
Concurrent writesGiới hạnHỗ trợ đầy đủ
Stored proceduresKhông
Kiểu dữ liệuDynamicStatic

Các trường hợp sử dụng phổ biến

SQLite lý tưởng cho:
  • Phát triển cục bộ: Tạo prototype ứng dụng nhanh chóng
  • Embedded apps: Mobile apps, desktop apps
  • Single-user apps: Database cá nhân
  • Phân tích dữ liệu: Khám phá dữ liệu nhanh
  • Testing: Unit tests với isolated databases
  • Prototyping: Trước khi migrate sang server database

Bước tiếp theo