SQLite是世界上最广泛部署的数据库引擎,以其轻量、零配置和嵌入式特性著称。本教程将带你从基础到高级全面掌握SQLite的使用技巧,特别强化了数据库连接和命令行操作部分。

一、安装与配置

Windows安装

  1. 访问 SQLite官网
  2. 下载 sqlite-tools-win32-*.zip
  3. 解压后添加目录到系统PATH
  4. 命令行输入 sqlite3 验证安装

Linux/macOS安装

# Debian/Ubuntu
sudo apt install sqlite3

# macOS (需先安装Homebrew)
brew install sqlite

二、数据库连接与基本操作

创建并连接数据库

# 创建或打开数据库(不存在则创建)
sqlite3 mydatabase.db

成功连接后,提示符变为:

sqlite>

实时操作示例

-- 创建用户表
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- 插入数据
INSERT INTO users (name, email) VALUES
('张三', 'zhangsan@example.com'),
('李四', 'lisi@example.com');

-- 查询数据
SELECT * FROM users;

-- 退出SQLite命令行
.quit

连接到现有数据库

# 连接到已存在的数据库
sqlite3 existing_db.db

内存数据库(临时数据库)

# 创建内存中的临时数据库(关闭后消失)
sqlite3 :memory:

三、SQLite命令行工具高级用法

常用点命令

命令说明
.open test.db打开/创建数据库
.tables显示所有表
.schema users显示表结构
.mode column列模式显示
.headers on显示列名
.show显示当前配置
.quit退出命令行
.help显示帮助信息

数据导入导出实战

导出数据到CSV:

sqlite3 mydatabase.db
.headers on
.mode csv
.output users.csv
SELECT * FROM users;
.output stdout

从CSV导入数据:

-- 创建临时表
CREATE TABLE temp_import(
name TEXT,
email TEXT
);

-- 导入数据
.mode csv
.import /path/to/new_users.csv temp_import

-- 插入到主表
INSERT INTO users (name, email)
SELECT name, email FROM temp_import;

-- 清理临时表
DROP TABLE temp_import;

备份与恢复

完整备份:

sqlite3 mydatabase.db ".backup 'backup.db'"

增量备份(使用WAL模式):

# 启用WAL模式
sqlite3 mydatabase.db "PRAGMA journal_mode=WAL;"

# 创建备份
cp mydatabase.db backup.db
cp mydatabase.db-wal backup.db-wal
cp mydatabase.db-shm backup.db-shm

四、Python集成实战

import sqlite3
from datetime import datetime

# 连接数据库(不存在则创建)
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()

# 创建表
cursor.execute('''CREATE TABLE IF NOT EXISTS orders (
id INTEGER PRIMARY KEY,
user_id INTEGER,
product TEXT,
amount REAL,
order_date TIMESTAMP,
FOREIGN KEY(user_id) REFERENCES users(id))''')

# 插入订单数据
user_id = 1
orders = [
(user_id, 'Laptop', 1200.50, datetime.now()),
(user_id, 'Mouse', 25.99, datetime.now())
]
cursor.executemany("INSERT INTO orders (user_id, product, amount, order_date) VALUES (?, ?, ?, ?)", orders)

# 复杂查询:用户及其订单
cursor.execute('''SELECT users.name, orders.product, orders.amount
FROM users
JOIN orders ON users.id = orders.user_id''')
for row in cursor.fetchall():
print(f"{row} purchased {row} for ${row:.2f}")

# 提交并关闭连接
conn.commit()
conn.close()

五、高级特性与优化

事务处理

BEGIN TRANSACTION;

-- 转账操作
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 提交事务
COMMIT;

-- 出错时回滚
-- ROLLBACK;

性能优化技巧

  1. 索引优化
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_orders_date ON orders(order_date);
  1. WAL模式
PRAGMA journal_mode=WAL;-- 启用写前日志
  1. 缓存调整
PRAGMA cache_size = -2000;-- 设置2000页缓存(约3.2MB)
  1. 查询优化
EXPLAIN QUERY PLAN SELECT * FROM users WHERE email = 'test@example.com';

全文搜索

-- 创建虚拟表
CREATE VIRTUAL TABLE docs USING fts5(title, content);

-- 插入数据
INSERT INTO docs VALUES
('SQLite Guide', 'Comprehensive guide to SQLite database'),
('Python Tutorial', 'Learn Python programming language');

-- 全文搜索
SELECT * FROM docs WHERE docs MATCH 'guide database';

六、图形化管理工具推荐

  1. DB Browser for SQLite
  1. SQLiteStudio

七、常见问题解决方案

数据库锁定问题

# 查看锁定进程
lsof mydatabase.db

# 安全解锁
cp mydatabase.db unlocked.db
sqlite3 unlocked.db "PRAGMA wal_checkpoint;"

数据库修复

# 导出数据
sqlite3 corrupt.db .dump > recovery.sql

# 重建数据库
sqlite3 new.db < recovery.sql

跨数据库操作

-- 附加另一个数据库
ATTACH DATABASE 'another.db' AS other;

-- 跨数据库查询
SELECT * FROM main.users
UNION ALL
SELECT * FROM other.users;

-- 分离数据库
DETACH DATABASE other;

八、实际应用场景

移动应用数据存储

// Android示例
SQLiteDatabase db = openOrCreateDatabase("app_data.db", MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS settings (key TEXT PRIMARY KEY, value TEXT)");
ContentValues values = new ContentValues();
values.put("key", "theme");
values.put("value", "dark");
db.insert("settings", null, values);

网站数据分析

# 日志分析示例
import sqlite3

conn = sqlite3.connect('weblog.db')
conn.execute('''CREATE TABLE IF NOT EXISTS visits
(id INTEGER PRIMARY KEY,
ip TEXT,
url TEXT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)''')

# 模拟插入访问记录
conn.execute("INSERT INTO visits (ip, url) VALUES (?, ?)",
('192.168.1.1', '/homepage'))
conn.commit()

学习资源推荐

  1. SQLite官方文档 - 最权威的参考指南
  2. SQLite Tutorial - 交互式学习平台
  3. SQLite Fiddle - 在线SQLite测试环境
  4. SQLite Viewer - 在线查看SQLite文件
graph TD
A[启动SQLite] --> B{数据库存在?}
B -->|是| C[打开数据库]
B -->|否| D[创建新数据库]
C --> E[执行SQL操作]
D --> E
E --> F[保存更改]
F --> G[退出SQLite]

通过本增强版教程,你不仅掌握了SQLite的核心操作,还学习了实际开发中的高级技巧。SQLite的轻量级特性使其成为嵌入式系统、移动应用和小型网站的完美选择,立即开始你的SQLite项目实践吧!

参考&致谢

系列教程

全部文章RSS订阅

数据库系列


作者: 夜法之书
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 夜法之书 !
评论
数据加载中 ...
 上一篇

阅读全文

MySQL 使用全面指南:从入门到高级实践
MySQL 使用全面指南:从入门到高级实践 MySQL 使用全面指南:从入门到高级实践
MySQL 是全球最流行的开源关系型数据库管理系统,广泛应用于 Web 应用开发。本教程将全面介绍 MySQL 的安装配置、核心操作、高级功能及最佳实践。
2025-11-22
下一篇 

阅读全文

MySQL命令行使用全面教程:从入门到精通
MySQL命令行使用全面教程:从入门到精通 MySQL命令行使用全面教程:从入门到精通
MySQL是最流行的关系型数据库之一,掌握其命令行工具是每位开发者和DBA的必备技能。本教程将带你系统学习MySQL命令行的核心功能和实用技巧。
2025-11-22
  目录