简介:本文详细介绍SQLite数据库的安装配置、核心特性、高级功能及实际应用场景,提供从基础操作到性能优化的完整解决方案,适合开发者、DBA及企业用户参考。
SQLite作为一款轻量级嵌入式数据库引擎,以其零配置、单文件存储和跨平台特性成为开发者首选。其核心优势体现在:
典型应用场景包括移动应用本地存储、嵌入式设备数据管理、桌面软件配置存储及测试环境模拟。
sudo apt install sqlite3)验证安装:
sqlite3 --version# 应输出类似:3.42.0 2023-05-16 12:15:21
启动交互式界面:
sqlite3 test.db
基础命令:
-- 创建表CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,email TEXT UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);-- 插入数据INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');-- 查询数据SELECT * FROM users WHERE name LIKE 'A%';-- 事务处理BEGIN TRANSACTION;UPDATE users SET email = 'new@example.com' WHERE id = 1;COMMIT; -- 或 ROLLBACK 回滚
Python示例:
import sqlite3conn = sqlite3.connect('example.db')cursor = conn.cursor()# 创建表cursor.execute('''CREATE TABLE IF NOT EXISTS books(id INTEGER PRIMARY KEY, title TEXT, author TEXT)''')# 插入数据cursor.execute("INSERT INTO books VALUES (?, ?, ?)",(1, 'SQLite Guide', 'John Doe'))conn.commit()conn.close()
Java示例(JDBC):
try (Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db")) {Statement stmt = conn.createStatement();stmt.execute("CREATE TABLE IF NOT EXISTS products " +"(id INTEGER PRIMARY KEY, name TEXT, price REAL)");PreparedStatement pstmt = conn.prepareStatement("INSERT INTO products VALUES (NULL, ?, ?)");pstmt.setString(1, "Laptop");pstmt.setDouble(2, 999.99);pstmt.executeUpdate();}
-- 单列索引CREATE INDEX idx_user_email ON users(email);-- 复合索引(注意顺序)CREATE INDEX idx_order_date_customer ON orders(order_date, customer_id);-- 部分索引(仅对特定条件)CREATE INDEX idx_active_users ON users(email) WHERE is_active = 1;
性能建议:
EXPLAIN QUERY PLAN分析查询路径SQLite支持三种锁定模式:
WAL模式(Write-Ahead Logging):
PRAGMA journal_mode=WAL; -- 提升并发性能
MEMORY模式:临时数据库(进程退出后丢失)
FULLTEXT搜索:
-- 创建虚拟表CREATE VIRTUAL TABLE docs USING fts5(title, content);-- 插入文档INSERT INTO docs VALUES ('doc1', 'SQLite is a software library');-- 全文查询SELECT * FROM docs WHERE docs MATCH 'software library';
JSON1扩展(SQLite 3.38+):
-- 存储JSON数据CREATE TABLE settings (id INTEGER PRIMARY KEY, config JSON);-- 查询JSON字段SELECT json_extract(config, '$.theme') FROM settings;
关键PRAGMA设置:
-- 缓存大小(单位KB)PRAGMA cache_size = -2000; -- 约2MB-- 同步模式(0=OFF, 1=NORMAL, 2=FULL)PRAGMA synchronous = NORMAL; -- 平衡安全与性能-- 页面大小(通常4096字节)PRAGMA page_size = 4096;
数据库锁定:
database is locked错误性能下降:
sqlite3_analyzer工具分析数据库VACUUM命令重建数据库文件PRAGMA key='password'启用加密(需SQLite加密扩展)
// iOS Swift示例let dbPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! + "/app.db"let db = try Connection(dbPath)let users = Table("users")let id = Expression<Int64>("id")let name = Expression<String>("name")try db.run(users.create { t int.column(id, primaryKey: true)t.column(name)})
# 使用Pandas与SQLite交互import pandas as pdimport sqlite3conn = sqlite3.connect('analytics.db')# 将CSV导入SQLitepd.read_csv('data.csv').to_sql('sales', conn, if_exists='replace', index=False)# 执行复杂分析query = """SELECT region, AVG(amount) as avg_saleFROM salesWHERE date BETWEEN '2023-01-01' AND '2023-12-31'GROUP BY region"""result = pd.read_sql(query, conn)
.timer ONsqlite-utils本手册覆盖了SQLite从基础安装到高级优化的完整知识体系,通过具体代码示例和场景分析,帮助开发者高效解决实际问题。建议结合官方文档进行深入学习,定期参与社区讨论以掌握最新技术动态。