Linux 命令工具 sqlite3 使用指南
一、工具概述
sqlite3
是 SQLite 數據庫的命令行工具,用于在 Linux 系統中直接操作 SQLite 數據庫(輕量級、無服務器、嵌入式關系型數據庫)。
核心特點:
- 無需安裝數據庫服務,直接通過命令行操作
.db
文件。 - 支持 SQL92 標準,語法簡潔,適合快速開發和小型項目。
- 數據存儲在單一文件中,方便移植和備份。
二、安裝方式
1. 系統自帶(多數 Linux 發行版)
直接在終端輸入 sqlite3
命令,若提示版本信息則已安裝:
sqlite3 --version # 輸出版本號(如 3.36.0)
2. 手動安裝(以 Ubuntu/Debian 為例)
sudo apt update
sudo apt install sqlite3 # 安裝命令行工具
sudo apt install libsqlite3-dev # 安裝開發庫(可選,用于編譯程序)
3. 源碼編譯(適用于自定義版本)
wget https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release # 下載源碼
tar -zxvf sqlite.tar.gz
cd sqlite
./configure
make && make install
三、核心功能
功能分類 | 說明 |
---|---|
數據庫操作 | 創建/打開數據庫、刪除表、備份數據庫文件 |
數據操作 | 增刪改查(CRUD)、事務管理、聚合函數計算 |
元數據查看 | 顯示表結構、列出數據庫中的表和索引、查看 SQL 語句執行計劃 |
工具命令 | 導出數據為 CSV/JSON、執行外部 SQL 文件、設置輸出格式(表格/列模式) |
四、基礎用法
1. 連接/創建數據庫
sqlite3 demo.db # 若文件不存在,創建新數據庫;存在則直接打開
退出數據庫:
.exit -- 或 .quit
2. 執行 SQL 語句
在 sqlite3
交互模式下直接輸入 SQL 命令(需以 ;
結尾):
-- 創建表
CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER,email TEXT UNIQUE
);-- 插入數據
INSERT INTO users (name, age, email) VALUES ('Alice', 25, 'alice@example.com');-- 查詢數據
SELECT * FROM users;
3. 常用元命令(以 .
開頭,無需 ;
結尾)
元命令 | 作用 |
---|---|
.tables | 列出所有表 |
.schema [表名] | 顯示表結構或指定表的建表語句 |
.headers on | 開啟查詢結果的列名顯示 |
.mode column | 設置結果格式為列模式(默認是列表) |
.output data.csv | 將查詢結果輸出到文件(需配合 .mode ) |
五、進階操作
1. 事務管理
BEGIN TRANSACTION; -- 開始事務
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');
UPDATE users SET age = 30 WHERE name = 'Bob';
COMMIT; -- 提交事務(或 ROLLBACK; 回滾)
2. 數據導出與導入
導出為 CSV 文件
.mode csv
.output users.csv
SELECT * FROM users;
從 SQL 文件導入數據
sqlite3 demo.db < data.sql # 執行 data.sql 中的 SQL 語句
3. 執行計劃分析
EXPLAIN QUERY PLAN SELECT * FROM users WHERE age > 25; -- 查看查詢優化策略
4. 數據庫備份與恢復
# 備份數據庫文件(直接復制 .db 文件)
cp demo.db demo_backup.db# 恢復(覆蓋原文件,需確保數據庫未被占用)
cp demo_backup.db demo.db
六、實戰案例:學生成績管理系統
場景:管理學生、課程、成績數據
1. 創建數據庫和表結構
CREATE DATABASE school; -- SQLite 無需顯式創建數據庫,直接操作文件即可
.open school.db -- 打開數據庫文件CREATE TABLE students (sid INTEGER PRIMARY KEY,sname TEXT NOT NULL,age INTEGER,gender TEXT
);CREATE TABLE courses (cid INTEGER PRIMARY KEY,cname TEXT NOT NULL,credit INTEGER
);CREATE TABLE scores (sid INTEGER,cid INTEGER,score REAL,PRIMARY KEY (sid, cid),FOREIGN KEY (sid) REFERENCES students(sid),FOREIGN KEY (cid) REFERENCES courses(cid)
);
2. 插入測試數據
INSERT INTO students VALUES (1, 'Tom', 18, 'Male');
INSERT INTO courses VALUES (101, 'Math', 4);
INSERT INTO scores VALUES (1, 101, 85.5);
3. 查詢平均成績
.headers on
.mode column
SELECT s.sname, AVG(sc.score) AS avg_score
FROM students s
JOIN scores sc ON s.sid = sc.sid
GROUP BY s.sid;
七、注意事項
-
文件權限:
- 操作數據庫文件時需注意讀寫權限,避免因權限不足導致操作失敗(如
sqlite3 demo.db
時提示Permission denied
)。
- 操作數據庫文件時需注意讀寫權限,避免因權限不足導致操作失敗(如
-
事務安全:
- 高并發場景下需謹慎使用事務(SQLite 單文件模式在寫入時會鎖定數據庫,適合低并發場景)。
-
數據類型:
- SQLite 采用 弱類型(列不強制約束數據類型),但建議遵循表定義的類型規范,避免邏輯錯誤。
-
文件大小:
- 單個 SQLite 文件最大支持約 140 TB(受限于文件系統),但實際應用中建議用于中小規模數據。
-
版本兼容:
- 低版本 SQLite 可能不支持部分 SQL 語法(如窗口函數),建議升級到最新版本(當前最新版本可通過
sqlite3 --version
查看)。
- 低版本 SQLite 可能不支持部分 SQL 語法(如窗口函數),建議升級到最新版本(當前最新版本可通過
通過以上內容,可快速掌握 sqlite3
命令行工具的核心用法,適用于開發調試、小型數據管理等場景。如需處理大規模數據或高并發場景,建議結合應用層邏輯或遷移至 PostgreSQL、MySQL 等數據庫。