Linux怎么安装SQLite 3并进行基本操作 Linux嵌入式数据库详解
SQLite是嵌入式常用数据库,Linux多预装命令行工具,C开发需另装开发包。使用时要区分点开头的元命令和以分号结尾的SQL语句,避免操作无响应。注意验证安装、正确使用分号及区分命令类型,可防止常见操作错误。
在嵌入式开发和轻量级数据存储领域,SQLite 几乎是一个绕不开的名字。它以其零配置、无服务器、单文件数据库的特性,赢得了从移动应用到桌面软件的广泛青睐。不过,对于刚接触它的开发者来说,从安装到第一个成功的查询,中间可能会遇到几个不大不小的“门槛”。今天,我们就来把这些常见的坑点捋清楚。

确认系统是否已自带 sqlite3
好消息是,现在绝大多数主流的 Linux 发行版,比如 Ubuntu 22.04 及以后版本、Fedora、Debian 这些,默认就已经预装了 sqlite3 命令行工具。验证方法很简单,打开终端输入 sqlite3 --version,如果看到类似 3.37.2 的版本号输出,那就说明工具本身是可用的。
但这里有个关键点需要划重点:能运行命令行工具,不等于能进行 C 语言开发。这两者是两码事。
新手容易在这里产生误判:
- 执行
which sqlite3命令有输出,只代表终端能找到这个程序,但编译 C 程序时需要的头文件(比如sqlite3.h)可能并不存在。缺少开发包,编译时就会报#include找不到文件的错误。 - 像 CentOS 或 RHEL 8 及以上的系统,默认可能只安装了运行时工具,开发包需要单独安装:
sudo yum install sqlite-devel。 - 在一些为嵌入式环境定制的极简系统镜像里(例如用 Buildroot 或 Yocto 构建的),可能连基础工具都没装,这就需要手动部署二进制文件或者进行交叉编译了。
Ubuntu/Debian 安装 sqlite3 与开发依赖
如果第一步验证时直接报了 command not found,那就需要手动安装。在基于 Debian 的系统上,命令很直观:
sudo apt update sudo apt install sqlite3 libsqlite3-dev
请注意,libsqlite3-dev 这个包必须安装。没有它,你的 C 程序编译之路就会卡在第一个关卡——sqlite3.h: No such file or directory。对于 Python 开发者来说,情况则好得多,因为 sqlite3 模块是 Python 的标准库,通常无需额外安装。除非你想使用更新的 pysqlite3 来替换内置版本,那才需要动用 pip。
安装完成后,怎么才算真正“可用”了呢?光看版本号还不够,得实际操作一下:
- 运行
sqlite3 test.db,如果成功进入了sqlite>提示符,并且当前目录下生成了test.db文件,这才算真正打开(或创建)了一个数据库文件。 - 如果遇到
unable to open database file的错误,先别慌,检查一下当前目录是否有写入权限。或者,直接使用绝对路径来指定数据库文件位置,比如sqlite3 /tmp/test.db。 - 退出时,记住要用 sqlite 自己的元命令
.exit或.quit,直接输入exit是没用的,那是退出系统 shell 的命令。
.tables 没输出?先看 .database 和分号有没有漏
很多朋友第一次用 .tables 命令查看表时,发现一片空白,就以为是命令失效了。其实,.tables 这个元命令非常“安静”,它只显示当前已打开的数据库中确实已经创建并提交了的表。没有输出,它也不会提示“空数据库”。
遇到这种情况,可以按以下步骤排查:
- 首先,输入
.database命令。这个命令会告诉你当前连接到了哪个数据库文件。如果输出显示main: :memory:,那说明你启动sqlite3时没有指定文件名,程序默认使用了一个内存数据库。所有操作在退出后都会消失。解决办法就是退出重来:sqlite3 myapp.db。 - 其次,检查你的建表语句。SQL 语句必须以分号
;结尾。比如CREATE TABLE users(id INTEGER, name TEXT);。如果漏掉了这个分号,你输入的语句就只是被缓存起来,并没有真正执行,.tables自然什么也看不到。 - 可以用
.schema命令来验证。如果表真的存在,它会打印出创建该表的 SQL 语句;如果输出是空白,那就确认表确实没建成功。 - 最后,注意表名的大小写问题。除非建表时用双引号明确指定了表名(如
CREATE TABLE "Log"),否则后续查询时表名必须严格匹配大小写。而.tables命令在显示时是不带引号的,这可能会造成一些混淆。
INSERT/SELECT 没反应?分号和点命令别混用
这大概是新手最常卡住的地方了:把 SQL 语句当成点命令来用,或者反过来。sqlite3 的交互模式严格区分两类指令:
- 点命令:所有以英文句点
.开头的,都是 sqlite3 自身的元命令,比如设置显示模式的.headers on、.mode column。这类命令不需要以分号结尾,而且也不能跟在 SQL 语句后面连续书写。 - SQL 语句:所有标准的 SQL,包括
INSERT、SELECT、UPDATE等,都必须以分号;结尾。如果忘了加分号,光标会跳到下一行并等待你继续输入,看起来就像是程序“卡住”了,没有任何反应。
这里有几个实用技巧:
- 一进入 sqlite3 环境,建议先执行
.headers on。这样在执行SELECT查询时,结果会显示列名,否则你看到的只是一堆数据,容易误以为查询没结果。 - 插入数据后,如果不确定是否成功,别只看命令行有没有报错。执行一句
SELECT COUNT(*) FROM 表名;来验证,记得带上分号。
来看一个完整的操作示例,感受一下正确的节奏:
sqlite3 app.db
sqlite> .headers on
sqlite> .mode column
sqlite> CREATE TABLE tasks(id INTEGER PRIMARY KEY, title TEXT);
sqlite> INSERT INTO tasks(title) VALUES ('learn sqlite');
sqlite> SELECT * FROM tasks;
还有一个容易被忽略的细节是:sqlite3 默认是自动提交模式,但这里的“自动提交”指的是每个以分号结束的独立语句本身就是一个事务。如果你在多行输入一个复杂的 SQL 时漏掉了结尾的分号,那么整个交互会话就会处于一种“悬停”状态——不报错,也不继续执行。在脚本或自动化场景中,这种静默等待尤其危险,往往需要靠 Ctrl+C 来中断。理解并区分好点命令和 SQL 语句,是顺畅使用 sqlite3 命令行工具的关键第一步。


































