SQLite 作为轻量级量嵌入式数据库,其数据格式(存储格式和数据类型)和使用命令(包括 SQL 命令和命令行工具命令)有鲜明特点。以下详细说明:
一、SQLite 数据格式
1. 数据库文件格式
SQLite 数据库以单一文件 形式存储(如 test.db),包含所有表、索引、数据等信息。文件格式是跨平台的(Windows/Linux/macOS 通用),且采用页式存储(默认页大小 4KB,可配置),确保高效读写。
2. 数据类型(动态类型系统)
SQLite 不严格遵循静态类型(与 MySQL 等不同),采用动态类型:列的类型仅为 "建议",实际可存储任意类型数据。但通常按以下类型设计表结构:
| 常用类型 | 说明 | 示例存储值 |
|---|---|---|
INTEGER |
整数类型(可存 signed 整数,支持自增主键) | 123、-45 |
REAL |
浮点数(8 字节双精度) | 3.14、-0.001 |
TEXT |
文本字符串(UTF-8/UTF-16/UTF-32 编码) | 'hello'、'中文' |
BLOB |
二进制数据(如图片、文件,原样存储) | 图片二进制流 |
NUMERIC |
数值类型(自动转换为合适的整数 / 浮点数 / 文本,适合日期、布尔值等) | '2023-10-01'、TRUE |
特殊规则:
-
布尔值:
TRUE存为1,FALSE存为0(整数类型)。 -
日期时间:无专用类型,常用
TEXT(如'2023-10-01 12:30:00')或INTEGER(时间戳,如1696139400)存储。 -
动态类型判定:插入数据时,SQLite 会根据值自动确定其 "存储类型"(而非列定义类型)。
二、SQLite 核心使用命令
(一)SQL 命令(数据操作与定义)
适用于所有 SQLite 客户端(命令行、编程语言接口等),与标准 SQL 兼容,部分有扩展。
-
数据库连接相关 无单独 SQL 命令,通过客户端工具连接文件(如
sqlite3 test.db)。 -
表操作(DDL)
-
创建表:
CREATE TABLE(见前文示例,支持约束如PRIMARY KEY、FOREIGN KEY等)。 -
删除表:
DROP TABLE [IF EXISTS] 表名; -
修改表:
ALTER TABLE 表名 RENAME TO 新表名;(重命名);ALTER TABLE 表名 ADD COLUMN 列定义;(添加列)。
-
-
数据操作(DML)
-
插入:
INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2); -
查询:
SELECT 列 FROM 表名 WHERE 条件 LIMIT 数量;(支持JOIN、GROUP BY、ORDER BY等)。 -
更新:
UPDATE 表名 SET 列=值 WHERE 条件; -
删除:
DELETE FROM 表名 WHERE 条件;
-
-
索引操作
-
创建索引:
CREATE [UNIQUE] INDEX 索引名 ON 表名(列1, 列2); -
删除索引:
DROP INDEX [IF EXISTS] 索引名;
-
-
事务操作
-
开始事务:
BEGIN TRANSACTION; -
提交:
COMMIT;(确认修改) -
回滚:
ROLLBACK;(取消修改)
-
-
**特殊命令(PRAGMA)**SQLite 扩展命令,用于查询 / 修改数据库配置:
-
开启外键支持:
PRAGMA foreign_keys = ON;(默认关闭) -
查看表结构:
PRAGMA table_info(表名); -
查看数据库页大小:
PRAGMA page_size;
-
(二)SQLite 命令行工具命令(.xxx 格式)
通过 sqlite3 命令行工具操作时,可用以下辅助命令(非 SQL 语法,以 . 开头):
| 命令 | 说明 | 示例 |
|---|---|---|
.open 文件名 |
打开或创建数据库文件 | .open test.db |
.databases |
查看当前连接的数据库文件路径 | .databases |
.tables |
列出所有表名 | .tables |
.schema [表名] |
查看表的建表语句(无表名则显示所有) | .schema users |
.mode 格式 |
设置查询结果显示格式(如列对齐、CSV) | .mode column(列对齐);.mode csv |
.header on/off |
是否显示列名标题 | .header on(显示标题) |
.output 文件名 |
将查询结果输出到文件(默认输出到终端) | .output result.txt |
.read 文件名 |
执行 SQL 脚本文件中的命令 | .read init.sql(执行 init.sql 脚本) |
.exit 或 .quit |
退出命令行工具 | .exit |
.help |
查看所有命令行工具命令 | .help |
三、使用示例(命令行流程)
-
创建并连接数据库:
sqlite3 mydb.db # 若mydb.db不存在则创建,进入命令行交互模式 -
创建表并插入数据:
CREATE TABLE students ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, score REAL ); INSERT INTO students (name, score) VALUES ('小明', 90.5), ('小红', 88); -
查询数据(格式化显示):
.mode column # 列对齐显示 .header on # 显示列名 SELECT * FROM students;输出:
id name score ---------- ---------- ---------- 1 小明 90.5 2 小红 88.0 -
导出查询结果到文件:
.output scores.txt # 结果输出到scores.txt SELECT name, score FROM students WHERE score > 85; .output stdout # 恢复输出到终端 -
退出:
.exit
总结
-
数据格式 :单一文件存储,动态类型(
INTEGER/TEXT/REAL/BLOB为主)。 -
核心命令 :SQL 命令(
CREATE/INSERT/SELECT等)用于数据操作;命令行工具命令(.tables/.schema等)用于辅助管理。
通过上述命令,可完成 SQLite 数据库的创建、表设计、数据增删改查等全部操作,适合轻量场景快速使用。
SQLite数据库简介
SQLite 是一款轻量级嵌入式关系型数据库,核心特点是零配置、跨平台、单文件存储,无需独立服务器即可运行。
一、核心特性
-
零配置部署:无需安装、启动服务,也不用配置用户名 / 密码,直接通过文件读写数据。
-
单文件存储 :整个数据库(表、索引、数据等)封装为单个文件(如
data.db),便于传输和备份。 -
跨平台兼容:数据库文件可在 Windows、Linux、macOS 等系统间无缝迁移,支持 32/64 位架构。
-
轻量高效:库体积极小(仅几十 KB),内存占用低,读写性能适配嵌入式设备和小型应用。
-
兼容标准 SQL:支持大部分 SQL92 标准语法,包括事务、索引、JOIN 查询、聚合函数等核心功能。
-
动态类型系统:列定义的类型仅为建议,可存储任意类型数据,灵活性高(但设计时建议遵循类型规范)。
二、适用场景
-
嵌入式设备:智能硬件、物联网设备、机顶盒等资源受限场景。
-
移动应用:iOS/Android 本地存储(如 App 缓存、用户数据)。
-
小型应用:桌面工具、轻量 Web 应用(低并发场景)、测试环境。
-
数据交换:作为临时数据载体,方便不同系统间传输结构化数据。
三、局限性
-
不适合高并发写入:单文件存储机制导致并发写入性能较弱,不适合高吞吐场景(如大型网站后端)。
-
功能简化:部分高级 SQL 特性支持有限(如
ALTER TABLE功能受限、不支持自定义函数默认实现)。 -
无用户权限管理:默认无身份验证和权限控制,需依赖外部机制保障数据安全。
四、核心优势总结
SQLite 以 "简单、轻量、零依赖" 为核心竞争力,无需复杂配置即可快速上手,是 "嵌入式场景 + 轻量数据存储" 的首选数据库。其单文件特性和跨平台兼容性,让数据管理和迁移变得极为便捷。
要不要我帮你整理一份SQLite 快速入门 cheat sheet,包含核心命令、数据类型和常用场景示例,方便你随时查阅?