news 2026/4/22 22:11:09

SQLite3学习笔记2:SQL 基础语法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQLite3学习笔记2:SQL 基础语法

1. 创建 / 打开数据库

SQLite3 的数据库是单文件存储,sqlite3命令后紧跟文件名即可实现 “不存在则创建、存在则打开”,这是嵌入式场景的核心特性(无需配置服务,直接操作文件)。

打开终端,执行以下命令创建 / 打开名为embedded_db.db的数据库:

sqlite3 embedded_db.db

执行后终端会进入sqlite>提示符,说明已成功打开 / 创建该数据库文件。

SQLite3 仅执行sqlite3 embedded_db.db时不会立即创建空文件,只有执行CREATE TABLE等实际写入操作后才生成文件,这是 SQLite3 的延迟写入特性,能最大程度节省嵌入式设备的存储资源。

2. 创建 / 删除数据表

2.1 创建数据表

数据表是存储数据的核心载体,嵌入式场景中常用 “设备参数 / 传感器数据 / 日志” 等表,以下是贴合嵌入式的表结构设计。

表结构设计(嵌入式设备参数表device_params

字段名类型约束嵌入式场景含义
idINTEGERPRIMARY KEY AUTOINCREMENT自增主键(唯一标识每条记录,便于查询 / 修改)
param_nameTEXTNOT NULL参数名(如 temp / 湿度 / 电压,非空避免无效数据)
param_valueREALNOT NULL参数值(REAL 支持浮点,适配传感器数据)
update_tsTIMESTAMPDEFAULT 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);

操作步骤

  1. sqlite>提示符下,输入上述完整的 CREATE TABLE 语句,执行后按回车。

  2. 验证表是否创建成功:执行以下命令查看数据库中的表列表:

.tables

输出包含device_params,证明表创建成功。

  1. 查看表结构(验证字段和约束):
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|0
2.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. 执行方式 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);
  1. 执行方式 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>提示符下执行)

  1. 全量查询(验证插入是否成功):
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
  1. 指定字段查询(模拟嵌入式运行时的轻量读取):
SELECTparam_name,param_valueFROMdevice_params;

输出如下:

temp|25.5humidity|60.2voltage|3.32current|0.85
  1. 条件查询(精准读取温度值):
SELECTparam_valueFROMdevice_paramsWHEREparam_name='temp';

输出如下:

25.5
  1. 拓展条件查询(读取值大于 10 的参数):
SELECT*FROMdevice_paramsWHEREparam_value>10;
输出如下:
1|temp|25.5|2026-01-2610:15:462|humidity|60.2|2026-01-2610:15:46

4. 更新(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>提示符下执行)

  1. 更新温度值(从 25.5→26.0,嵌入式场景:传感器新读数):
UPDATEdevice_paramsSETparam_value=26.0WHEREparam_name='temp';
  1. 验证更新结果(核对 temp 值):
SELECTparam_valueFROMdevice_paramsWHEREparam_name='temp';

输出如下:

26.0
4.2 删除数据(DELETE)

嵌入式设备存储有限,DELETE 用于清理无效 / 过期参数(比如超过 7 天的日志),同样必须加 WHERE 条件,否则会删除全表数据。

DELETE 语法详解(嵌入式必加 WHERE)

-- 核心语法:DELETE FROM 表名 WHERE 条件;-- 关键注意点:-- 1. WHERE条件:嵌入式中绝对不能省略,否则全表数据被删-- 2. 条件可基于param_name/id/时间戳(嵌入式常用按时间删)-- 3. 嵌入式中删除后数据不可恢复,需谨慎

操作步骤(请在sqlite>提示符下执行)

  1. 删除 current 参数(模拟清理无用的电流数据):
DELETEFROMdevice_paramsWHEREparam_name='current';
  1. 验证删除结果(全量查询,确认 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
  1. 拓展:删除值小于 5 的参数(模拟清理无效的电压数据):
DELETEFROMdevice_paramsWHEREparam_value<5;
  1. 最终验证(全量查询,确认只剩 temp 和 humidity):
SELECT*FROMdevice_params;

输出如下:

1|temp|26.0|2026-01-2610:15:462|humidity|60.2|2026-01-2610:15:46
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 8:34:51

导师推荐!8个AI论文平台测评:研究生科研写作全攻略

导师推荐&#xff01;8个AI论文平台测评&#xff1a;研究生科研写作全攻略 学术写作工具测评&#xff1a;为何需要一份精准指南 在当前科研环境日益激烈的背景下&#xff0c;研究生群体在论文写作过程中面临诸多挑战。从选题构思、文献检索到内容撰写与格式规范&#xff0c;每…

作者头像 李华
网站建设 2026/4/23 8:32:45

金融AI股市预测工具Kronos:智能投资决策指南

金融AI股市预测工具Kronos&#xff1a;智能投资决策指南 【免费下载链接】Kronos Kronos: A Foundation Model for the Language of Financial Markets 项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos 在瞬息万变的金融市场中&#xff0c;投资者常常面…

作者头像 李华
网站建设 2026/4/23 8:31:03

Qwen3-32B:思维模式自由切换,13万上下文新体验

Qwen3-32B&#xff1a;思维模式自由切换&#xff0c;13万上下文新体验 【免费下载链接】Qwen3-32B Qwen3-32B具有以下特点&#xff1a; 类型&#xff1a;因果语言模型 训练阶段&#xff1a;训练前和训练后 参数数量&#xff1a;32.8B 参数数量&#xff08;非嵌入&#xff09;&a…

作者头像 李华
网站建设 2026/4/23 8:36:23

技术指南:3D扫描模型处理与OrcaSlicer网格优化实践

技术指南&#xff1a;3D扫描模型处理与OrcaSlicer网格优化实践 【免费下载链接】OrcaSlicer G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.) 项目地址: https://gitcode.com/GitHub_Trending/orc/OrcaSlicer 3D扫描模型的处理…

作者头像 李华