零基础入门 SQLite:最常用指令大全(附实战案例)
SQLite是一款轻量级嵌入式数据库,具有零配置、跨平台、文件式存储等特点,适合移动端和嵌入式应用开发。本文介绍了SQLite的核心操作指南:1. 安装与环境配置;2. 数据库基础操作(创建/查看/删除表);3. 增删改查(CRUD)语法;4. 进阶技巧(索引优化和事务处理);5. 常用命令行工具。文章还提供了新手常见问题解答,帮助开发者快速掌握SQLite的基本使用。通过实际案例演示了数据表创建
作为一名程序员,你一定听说过 SQLite—— 这款轻量级嵌入式数据库凭借 “零配置、免安装、文件式存储” 的特性,成为移动端、嵌入式设备、小型工具的首选数据库。如果你是刚接触 SQLite 的新手,本文将带你快速掌握日常开发中最常用的指令,从入门到上手实战,一篇搞定!
一、认识 SQLite:为什么它值得学?
在开始之前,先简单聊聊 SQLite 的特点,帮你理解它的适用场景:
- 无需服务:不像 MySQL、PostgreSQL 需要单独启动服务,SQLite 直接通过文件操作,一个
.db文件就是一个数据库。 - 跨平台:支持 Windows、Linux、Mac,甚至手机(Android/iOS 内置 SQLite)。
- 轻量级:库文件体积不到 600KB,适合资源有限的场景。
- ACID 兼容:支持事务的原子性、一致性、隔离性、持久性,数据安全有保障。
日常开发中,日志存储、本地缓存、小型工具数据管理等场景,用 SQLite 再合适不过了。
二、准备工作:安装与启动
1. 安装 SQLite
- Windows:去 SQLite 官网 下载
sqlite-tools-win32-x86-xxxx.zip,解压后得到sqlite3.exe,放到任意目录,再将该目录添加到系统环境变量。 - Linux/Mac:通常自带 SQLite,终端输入
sqlite3即可启动,若没有则用包管理器安装(如sudo apt install sqlite3)。
2. 启动与退出
终端输入以下命令,创建或打开一个数据库文件(若 test.db 不存在则自动创建):
sqlite3 test.db # 启动并关联 test.db 数据库
退出数据库交互模式:
.quit # 或 .exit
三、数据库操作:基础中的基础
1. 查看当前数据库信息
刚进入交互模式时,先看看当前连接的数据库:
.databases # 显示数据库文件路径
输出示例:
main: /home/user/test.db
2. 查看所有表结构
想知道数据库里有哪些表,以及表的定义?用这个:
.schema # 查看所有表的创建语句
.schema 表名 # 查看指定表的创建语句
四、表操作:创建、修改与删除
表是数据库的核心,先学会如何创建和管理表。
1. 创建表(CREATE TABLE)
基本语法:
CREATE TABLE [IF NOT EXISTS] 表名 (
列名1 数据类型 [约束],
列名2 数据类型 [约束],
...
[PRIMARY KEY (列名)] -- 主键约束
);
实战案例:创建一个 users 表存储用户信息:
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT, -- 自增主键(唯一标识用户)
name TEXT NOT NULL, -- 用户名,非空约束
age INTEGER CHECK(age > 0), -- 年龄,必须大于0(检查约束)
email TEXT UNIQUE, -- 邮箱,唯一约束(不允许重复)
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 创建时间,默认当前时间
);
说明:
IF NOT EXISTS:避免表已存在时报错。INTEGER PRIMARY KEY AUTOINCREMENT:自动生成唯一 ID(常用作主键)。- 约束(
NOT NULL、UNIQUE等)用于保证数据合法性。
2. 查看表结构细节
创建表后,想确认列的类型和约束?用 PRAGMA 指令:
PRAGMA table_info(users); -- 查看 users 表的列信息
输出示例:
cid name type notnull dflt_value pk
--- ---------- ---------- ------- ------------------- --
0 id INTEGER 0 1
1 name TEXT 1 0
2 age INTEGER 0 0
3 email TEXT 0 0
4 create_time TIMESTAMP 0 CURRENT_TIMESTAMP 0
3. 修改表(ALTER TABLE)
SQLite 对表的修改支持有限,主要能做两件事:
- 重命名表:
ALTER TABLE users RENAME TO user_info; -- 将 users 表改名为 user_info
- 添加新列:
ALTER TABLE users ADD COLUMN gender TEXT; -- 给 users 表添加 gender 列
注意:SQLite 不支持直接修改列类型或删除列,若需此类操作,需创建新表并迁移数据(新手暂时不用深究,遇到时再查即可)。
4. 删除表(DROP TABLE)
谨慎操作!删除表会同时删除所有数据:
DROP TABLE IF EXISTS users; -- 删除 users 表(若存在)
五、核心操作:增删改查(CRUD)
这部分是数据库操作的灵魂,必须熟练掌握。
1. 插入数据(INSERT)
向表中添加数据,语法:
INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);
实战案例:
-- 插入一条完整数据
INSERT INTO users (name, age, email)
VALUES ('张三', 28, 'zhangsan@example.com');
-- 插入部分列(其他列用默认值,如 create_time 会自动填当前时间)
INSERT INTO users (name, age)
VALUES ('李四', 30);
-- 一次性插入多行
INSERT INTO users (name, email)
VALUES ('王五', 'wangwu@example.com'),
('赵六', 'zhaoliu@example.com');
2. 查询数据(SELECT)
查询是最常用的操作,语法灵活,先从基础开始:
SELECT 列1, 列2, ... FROM 表名
[WHERE 条件]
[ORDER BY 列名 [ASC|DESC]]
[LIMIT 数量 OFFSET 偏移量];
实战案例:
(1)查询所有数据
-- 显示表头(命令行默认不显示,先开启)
.headers on
.mode column -- 列对齐,更美观
-- 查询所有用户
SELECT * FROM users;
输出示例:
id name age email create_time
---------- ---------- ---------- -------------------- -------------------
1 张三 28 zhangsan@example.com 2023-10-30 15:00:00
2 李四 30 2023-10-30 15:01:00
3 王五 NULL wangwu@example.com 2023-10-30 15:02:00
(2)条件查询
-- 查询年龄大于28的用户
SELECT name, age FROM users WHERE age > 28;
-- 查询邮箱不为空的用户
SELECT name, email FROM users WHERE email IS NOT NULL;
-- 模糊查询(名字含“张”)
SELECT * FROM users WHERE name LIKE '%张%';
(3)排序与分页
-- 按年龄升序排列(默认ASC,可省略)
SELECT * FROM users ORDER BY age ASC;
-- 按ID降序,取前2条
SELECT * FROM users ORDER BY id DESC LIMIT 2;
-- 分页:从第2条开始,取2条(OFFSET 1 表示跳过1条)
SELECT * FROM users LIMIT 2 OFFSET 1;
(4)聚合查询
用 COUNT、SUM、AVG 等函数统计数据:
-- 统计用户总数
SELECT COUNT(*) AS total_users FROM users;
-- 计算平均年龄(忽略NULL值)
SELECT AVG(age) AS avg_age FROM users;
-- 按年龄分组,统计每个年龄段的人数
SELECT age, COUNT(*) AS count FROM users GROUP BY age;
3. 更新数据(UPDATE)
修改已有数据,语法:
UPDATE 表名 SET 列1=值1, 列2=值2 WHERE 条件;
实战案例:
-- 将李四的年龄改为31
UPDATE users SET age = 31 WHERE name = '李四';
-- 给所有没有邮箱的用户添加默认邮箱
UPDATE users SET email = 'default@example.com' WHERE email IS NULL;
警告:如果省略 WHERE 条件,会更新表中所有行,务必谨慎!
4. 删除数据(DELETE)
删除表中的数据,语法:
DELETE FROM 表名 WHERE 条件;
实战案例:
-- 删除年龄为空的用户
DELETE FROM users WHERE age IS NULL;
-- 删除邮箱为默认值的用户
DELETE FROM users WHERE email = 'default@example.com';
警告:省略 WHERE 条件会删除表中所有数据(表结构保留),操作前一定要确认!
六、进阶技巧:索引与事务
1. 索引:加速查询
当表中数据量很大时,查询会变慢,此时可以给常用查询的列创建索引:
-- 给 email 列创建索引(查询邮箱时会更快)
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
-- 查看所有索引
.indexes
注意:索引会加快查询,但会减慢插入 / 更新 / 删除速度(因为索引也要同步更新),只给常用查询的列创建即可。
删除索引:
DROP INDEX IF EXISTS idx_users_email;
2. 事务:保证数据一致性
事务可以将多个操作打包成一个整体,要么全部成功,要么全部失败(避免部分操作生效导致的数据混乱)。
语法:
BEGIN TRANSACTION; -- 开始事务
-- 执行一系列操作(INSERT/UPDATE/DELETE)
COMMIT; -- 提交事务(所有操作生效)
ROLLBACK; -- 回滚事务(放弃所有操作,回到开始前的状态)
实战案例:转账场景(A 减 100,B 加 100,必须同时成功)
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE name = 'A';
UPDATE accounts SET balance = balance + 100 WHERE name = 'B';
COMMIT; -- 确认无误后提交
-- 若中间出错,执行 ROLLBACK; 撤销操作
七、常用终端命令
除了 SQL 语句,SQLite 命令行还有一些实用的终端命令(以 . 开头):
| 命令 | 作用 |
|---|---|
.help |
查看所有终端命令 |
.headers on |
显示查询结果的表头 |
.mode column |
列对齐显示(美观) |
.timer on |
显示查询执行时间 |
.output 文件名 |
将查询结果导出到文件 |
.read 文件名 |
执行文件中的 SQL 语句 |
八、常见问题
1.为什么查询结果没有表头?
命令行默认不显示表头,执行 .headers on 即可开启。
2.如何导出查询结果到 CSV?
sqlite3 your_database.db --1.先进入数据库
.mode csv --2.设置 SQLite 命令行的输出格式为 CSV(逗号分隔值)
.output result.csv --3.指定查询结果的输出目标为文件 result.csv
SELECT * FROM users; -- 4.结果会写入 result.csv
.output stdout -- 5.恢复输出到终端
在 SQLite 中,也可以通过一条组合指令(用分号分隔多个终端命令)将 users 表数据导出为 CSV 文件,无需分步执行。示例如下:
sqlite3 your_database.db ".mode csv; .output users.csv; SELECT * FROM users; .output stdout"
指令解释:
sqlite3 your_database.db:启动 SQLite 并连接到你的数据库文件(替换your_database.db为实际数据库名)。.mode csv:设置输出格式为 CSV。.output users.csv:指定输出文件为users.csv(保存在当前终端所在目录)。SELECT * FROM users:查询users表的所有数据(结果会写入 CSV 文件)。.output stdout:恢复输出到终端(避免后续操作继续写入文件)。
执行后效果:
当前目录会生成 users.csv 文件,包含 users 表的所有数据,可用 Excel、记事本等工具打开。
注意:
- 若数据库文件不在当前目录,需指定完整路径(如
sqlite3 /path/to/your_database.db ...)。 - 若
users.csv已存在,会被自动覆盖。
总结
本文涵盖了 SQLite 常用的指令,从表的创建到数据的增删改查,再到索引和事务的基础用法。SQLite 语法贴近标准 SQL,学会这些基本能应对日常开发需求。
更多推荐



所有评论(0)