1. 创建 / 打开数据库
SQLite3 的数据库是单文件存储,sqlite3命令后紧跟文件名即可实现 “不存在则创建、存在则打开”,这是嵌入式场景的核心特性(无需配置服务,直接操作文件)。
打开终端,执行以下命令创建 / 打开名为embedded_db.db的数据库:
sqlite3 embedded_db.db执行后终端会进入sqlite>提示符,说明已成功打开 / 创建该数据库文件。
SQLite3 仅执行sqlite3 embedded_db.db时不会立即创建空文件,只有执行CREATE TABLE等实际写入操作后才生成文件,这是 SQLite3 的延迟写入特性,能最大程度节省嵌入式设备的存储资源。
2. 创建 / 删除数据表
2.1 创建数据表
数据表是存储数据的核心载体,嵌入式场景中常用 “设备参数 / 传感器数据 / 日志” 等表,以下是贴合嵌入式的表结构设计。
表结构设计(嵌入式设备参数表device_params)
| 字段名 | 类型 | 约束 | 嵌入式场景含义 |
|---|---|---|---|
| id | INTEGER | PRIMARY KEY AUTOINCREMENT | 自增主键(唯一标识每条记录,便于查询 / 修改) |
| param_name | TEXT | NOT NULL | 参数名(如 temp / 湿度 / 电压,非空避免无效数据) |
| param_value | REAL | NOT NULL | 参数值(REAL 支持浮点,适配传感器数据) |
| update_ts | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 更新时间戳(自动记录数据修改时间,便于溯源) |
SQL 语法详解
-- 创建表的核心语法:CREATE TABLE IF NOT EXISTS 表名 (字段1 类型 约束, 字段2 类型 约束,...);-- 关键语法点:-- 1. IF NOT EXISTS:避免重复创建表报错(嵌入式程序重启时很重要)-- 2. PRIMARY KEY:主键,保证记录唯一性-- 3. AUTOINCREMENT:整数主键自增(嵌入式中无需手动维护ID)-- 4. NOT NULL:字段不能为空,避免无效数据-- 5. DEFAULT CURRENT_TIMESTAMP:默认值为当前时间,无需手动插入CREATETABLEIFNOTEXISTSdevice_params(idINTEGERPRIMARYKEYAUTOINCREMENT,param_nameTEXTNOTNULL,param_valueREALNOTNULL,update_tsTIMESTAMPDEFAULTCURRENT_TIMESTAMP);操作步骤
在
sqlite>提示符下,输入上述完整的 CREATE TABLE 语句,执行后按回车。验证表是否创建成功:执行以下命令查看数据库中的表列表:
.tables输出包含device_params,证明表创建成功。
- 查看表结构(验证字段和约束):
PRAGMA table_info(device_params);会输出表的字段列表、类型、约束等信息,可核对是否和设计一致。
0|id|INTEGER|0||11|param_name|TEXT|1||02|param_value|REAL|1||03|update_ts|TIMESTAMP|0|CURRENT_TIMESTAMP|02.2 删除数据表
删除数据表的核心 SQL 语法是DROP TABLE,嵌入式场景中必须掌握两个关键参数:
| 语法 | 作用 | 嵌入式场景价值 |
|---|---|---|
DROP TABLE 表名; | 删除指定数据表(表不存在则报错) | 仅调试场景用,嵌入式中易导致程序崩溃 |
DROP TABLE IF EXISTS 表名; | 删除表(表不存在则无操作,不报错) | 嵌入式首选,程序重启 / 初始化时避免报错 |
注意:DROP TABLE会永久删除表结构 + 所有数据,且嵌入式设备无回收站 / 日志回滚,数据删除后不可恢复(除非提前备份)。
场景 1:安全删除(推荐,嵌入式调试 / 初始化用)
用IF EXISTS避免表不存在时报错,步骤如下:
-- 1. 打开数据库sqlite3 embedded_db.db-- 2. (可选)先查看当前所有表,确认要删除的表存在sqlite>.tables-- 输出:device_params(确认表名)-- 3. 安全删除表(IF EXISTS是嵌入式核心)sqlite>DROPTABLEIFEXISTSdevice_params;-- 4. 验证删除结果sqlite>.tables-- 输出为空,说明表已删除场景 2:普通删除(表不存在则报错,嵌入式禁止)
仅用于确认表一定存在的调试场景:
sqlite>DROPTABLEdevice_params;-- 若表不存在,会报错:Error: no such table: device_params(嵌入式中会导致程序异常)3. 插入(INSERT)+ 查询(SELECT)数据
3.1 插入数据(INSERT)
嵌入式场景中,INSERT 用于将传感器数据、设备电压 / 电流等参数写入数据库,以下是适配嵌入式的语法和操作。
INSERT 语法详解(两种方式,嵌入式优先选方式 1)
| 方式 | 语法 | 嵌入式场景优势 |
|---|---|---|
| 方式 1(指定字段) | INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2); | 字段顺序变动时不报错,嵌入式程序迭代更健壮 |
| 方式 2(不指定字段) | INSERT INTO 表名 VALUES (值1, 值2, 值3, 值4); | 代码短,但依赖字段顺序,嵌入式中易出错,不推荐 |
关键注意点:
param_name是 TEXT 类型,值必须用单引号包裹;param_value是 REAL 类型(浮点),直接写数值即可;id是自增主键、update_ts有默认时间戳,无需手动赋值(写 NULL 会自动填充)。
操作步骤(在sqlite>提示符下逐行执行)
- 执行方式 1 的 3 条插入语句(温度、湿度、电压):
INSERTINTOdevice_params(param_name,param_value)VALUES('temp',25.5);INSERTINTOdevice_params(param_name,param_value)VALUES('humidity',60.2);INSERTINTOdevice_params(param_name,param_value)VALUES('voltage',3.32);- 执行方式 2 的 1 条插入语句(电流,仅作对比):
INSERTINTOdevice_paramsVALUES(NULL,'current',0.85,CURRENT_TIMESTAMP);3.2 查询数据(SELECT)
SELECT 是嵌入式中读取数据的核心,支持 “全量查(调试)”、“指定字段查(省内存)”、“条件查(精准读)”,完全适配嵌入式设备内存有限的特点。
SELECT 语法详解(3 种嵌入式常用场景)
| 场景 | 语法 | 嵌入式使用场景 |
|---|---|---|
| 全量查询 | SELECT * FROM device_params; | 开发调试阶段,查看所有数据 |
| 指定字段查询 | SELECT param_name, param_value FROM device_params; | 运行阶段,只读取需要的字段,减少内存占用 |
| 条件查询 | SELECT param_value FROM device_params WHERE param_name = 'temp'; | 精准读取某一个参数(如仅读温度),嵌入式最常用 |
操作步骤(在sqlite>提示符下执行)
- 全量查询(验证插入是否成功):
SELECT*FROMdevice_params;输出如下:
1|temp|25.5|2026-01-2610:15:462|humidity|60.2|2026-01-2610:15:463|voltage|3.32|2026-01-2610:15:464|current|0.85|2026-01-2610:15:50- 指定字段查询(模拟嵌入式运行时的轻量读取):
SELECTparam_name,param_valueFROMdevice_params;输出如下:
temp|25.5humidity|60.2voltage|3.32current|0.85- 条件查询(精准读取温度值):
SELECTparam_valueFROMdevice_paramsWHEREparam_name='temp';输出如下:
25.5- 拓展条件查询(读取值大于 10 的参数):
SELECT*FROMdevice_paramsWHEREparam_value>10;输出如下:1|temp|25.5|2026-01-2610:15:462|humidity|60.2|2026-01-2610:15:464. 更新(UPDATE)+ 删除(DELETE)数据
4.1 更新数据(UPDATE
嵌入式场景中,UPDATE 用于实时更新传感器数据(比如温度从 25.5 变为 26.0)、校准参数等,核心是必须加 WHERE 条件,否则会更新全表数据。
UPDATE 语法详解(嵌入式必加 WHERE)
-- 核心语法:UPDATE 表名 SET 字段1=新值1, 字段2=新值2 WHERE 条件;-- 关键注意点:-- 1. WHERE条件:嵌入式中必须加,避免误改全表(比如只改temp的value,不改其他参数)-- 2. 可同时更新多个字段:比如改value+手动更新时间戳-- 3. 条件可基于param_name(嵌入式常用)或id操作步骤(在sqlite>提示符下执行)
- 更新温度值(从 25.5→26.0,嵌入式场景:传感器新读数):
UPDATEdevice_paramsSETparam_value=26.0WHEREparam_name='temp';- 验证更新结果(核对 temp 值):
SELECTparam_valueFROMdevice_paramsWHEREparam_name='temp';输出如下:
26.04.2 删除数据(DELETE)
嵌入式设备存储有限,DELETE 用于清理无效 / 过期参数(比如超过 7 天的日志),同样必须加 WHERE 条件,否则会删除全表数据。
DELETE 语法详解(嵌入式必加 WHERE)
-- 核心语法:DELETE FROM 表名 WHERE 条件;-- 关键注意点:-- 1. WHERE条件:嵌入式中绝对不能省略,否则全表数据被删-- 2. 条件可基于param_name/id/时间戳(嵌入式常用按时间删)-- 3. 嵌入式中删除后数据不可恢复,需谨慎操作步骤(请在sqlite>提示符下执行)
- 删除 current 参数(模拟清理无用的电流数据):
DELETEFROMdevice_paramsWHEREparam_name='current';- 验证删除结果(全量查询,确认 current 记录消失):
SELECT*FROMdevice_params;输出如下:
1|temp|26.0|2026-01-2610:15:462|humidity|60.2|2026-01-2610:15:463|voltage|3.32|2026-01-2610:15:46- 拓展:删除值小于 5 的参数(模拟清理无效的电压数据):
DELETEFROMdevice_paramsWHEREparam_value<5;- 最终验证(全量查询,确认只剩 temp 和 humidity):
SELECT*FROMdevice_params;输出如下:
1|temp|26.0|2026-01-2610:15:462|humidity|60.2|2026-01-2610:15:46