SQLite 是目前世界上最流行的嵌入式数据库之一,它不需要像 MySQL、SQL Server 那样安装独立的服务端程序,整个数据库被保存在一个单独的文件中,启动程序时直接读写文件即可。正因为这种零配置的特性,SQLite 被广泛用于手机 App、桌面软件、浏览器和小型网站。对初学者来说,从 SQLite 入门数据库是一个非常好的选择,本文将手把手带你创建第一个数据库文件和第一张表。

一、准备工作:安装并进入 sqlite3 命令行工具
在开始创建数据库之前,首先需要确认系统中是否已经安装了 SQLite。Windows 用户可以前往 SQLite 官网下载预编译的工具包,解压后得到 sqlite3.exe;Linux 用户一般可以通过包管理器直接安装,例如 Ubuntu 下执行 sudo apt install sqlite3;macOS 系统则自带 sqlite3 命令,打开终端输入 sqlite3 --version 即可查看版本号,如果输出了版本信息,说明环境已经就绪。
安装完成后,打开命令行窗口,切换到一个工作目录,例如在 Windows 下进入 D:\sqlite_demo 目录,然后执行以下命令即可创建(或打开)一个数据库文件:
sqlite3 mydb.db
这条命令的含义是:如果当前目录下存在 mydb.db 文件就直接打开它,如果不存在就新建一个同名文件作为数据库。需要注意的是,SQLite 采用惰性创建机制,只有在执行了第一条建表或其他写入操作之后,.db 文件才会真正落盘。执行成功后,命令提示符会变成 sqlite>,表示你已经进入了 SQLite 的交互式环境。
在交互环境中,所有以点号开头的命令是 SQLite 自身的元命令,常用的有 .help 查看帮助、.databases 查看当前打开的数据库、.tables 列出所有表、.schema 查看建表语句、.quit 退出交互环境。这些命令不需要以分号结尾,而 SQL 语句则必须以分号结尾,这是初学者最容易混淆的地方。
二、创建第一张表:CREATE TABLE 语句详解
有了数据库之后,接下来就可以建表了。假设我们要建一张用户表 users,包含编号、用户名、邮箱和注册时间四个字段,可以在 sqlite> 提示符下输入以下 SQL 语句:
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
email TEXT UNIQUE,
created DATETIME DEFAULT CURRENT_TIMESTAMP
);这条语句中有几个关键点值得仔细理解。INTEGER PRIMARY KEY 表示 id 字段是整型主键,在 SQLite 中整型主键会自动与行号关联,按主键查询速度极快;AUTOINCREMENT 关键字保证每插入一行 id 自动递增,且不会复用被删除行的编号;NOT NULL 约束要求 username 字段必须填值;UNIQUE 约束保证 email 字段不能出现重复值;DEFAULT CURRENT_TIMESTAMP 则让 created 字段在插入时自动记录当前时间,无需手动填写。
SQLite 采用动态类型系统,常用的存储类型有五种:NULL、INTEGER、REAL、TEXT 和 BLOB。与传统数据库不同,SQLite 允许向 TEXT 字段插入数字,也允许向 INTEGER 字段插入字符串,它会尽量做类型转换,这种机制被称为类型亲和性。虽然灵活,但在实际开发中仍然建议声明字段类型并按类型写入数据,这样可以让数据更规范,也方便将来迁移到其他数据库。
建表完成后,可以执行 .tables 命令验证,如果输出中出现了 users,说明表创建成功。再执行 .schema users 可以看到 SQLite 保存的完整建表语句,这也是一种备份表结构的好方法。
三、插入数据并验证表结构
表创建好之后,我们插入几条测试数据来验证字段约束是否生效,示例如下:
INSERT INTO users (username, email) VALUES ('zhangsan', 'zhangsan@ipipp.com');
INSERT INTO users (username, email) VALUES ('lisi', 'lisi@ipipp.com');
INSERT INTO users (username, email) VALUES ('wangwu', 'zhangsan@ipipp.com');前两条语句会顺利插入,id 由 1 和 2 自动生成,created 字段自动填入当前时间。第三条语句故意使用了与第一条相同的邮箱,由于 email 字段带有 UNIQUE 约束,SQLite 会报错并提示 UNIQUE constraint failed,这正好验证了约束的作用。如果不希望程序因重复数据中断,可以使用 INSERT OR IGNORE 语法,遇到冲突时静默跳过该条记录。
插入完成后,使用 SELECT 语句查询全表数据:
SELECT * FROM users;
查询结果会以默认格式展示各字段的值,如果想要更清晰的表格样式,可以先执行 .headers on 打开表头显示,再执行 .mode column 设置列对齐模式,输出会整齐很多。最后执行 .quit 退出交互环境,回到系统命令行后,你会发现在工作目录下多了一个 mydb.db 文件,这就是你的第一个完整的 SQLite 数据库文件,可以直接拷贝到其他机器上使用。
四、常见问题与最佳实践建议
初学者在第一次操作时常遇到几个典型问题。第一是忘了写分号就回车,此时 SQLite 不会报错而是显示续行提示符 ...>,等待你继续输入,补上一个分号回车即可。第二是在错误的目录下创建了 .db 文件,导致后来找不到数据库,建议固定一个工作目录来管理数据库文件。第三是误以为执行 sqlite3 mydb.db 后文件立即生成,实际上没有写入操作时文件不会真正创建。
在表设计方面,有几点最佳实践值得遵循:每个表都应定义整型自增主键作为唯一标识;对用户名、邮箱等业务上唯一的字段加上 UNIQUE 约束;对不能为空的字段显式声明 NOT NULL;时间字段尽量交给数据库通过默认值自动维护。此外,SQLite 默认没有开启外键约束,如果需要在多表之间建立关联,应在打开数据库后执行 PRAGMA foreign_keys = ON;,否则外键声明不会生效。掌握这些细节后,你就已经完成了数据库学习中最关键的第一步,后续可以继续学习更新、删除、索引和事务等进阶内容。