嵌入式数据库——SQLite基础

一、数据库核心概念深度解析

1. 数据

定义:数据是描述事物的符号记录,是数据库的核心存储单元,可涵盖数字、文本、图像、音频、视频等多种形式,能被计算机系统识别、存储并通过程序进行加工处理。

分类

  • 结构化数据:具有固定格式和长度,如表格中的数值、字符串(例:学生表中的学号、成绩)。
  • 半结构化数据:具备一定结构但不严格,如 JSON、XML 文件。
  • 非结构化数据:无固定结构,如图片、视频、音频文件。

2. 数据库(Database)

定义 :长期存储在计算机存储介质(硬盘、固态硬盘、U 盘等)上,由数据库管理系统(DBMS)统一管理的结构化、可共享的数据集集合。

核心特征

  • 数据结构化:数据不再孤立存储,而是按特定模型组织(如关系模型)。
  • 数据共享性:多个用户 / 程序可同时访问数据,且能保证数据一致性。
  • 低冗余度:避免数据重复存储,节省存储空间。
  • 数据独立性:数据的存储结构和逻辑结构分离,修改存储结构不影响应用程序。
  • 可控性:通过权限管理、备份恢复机制保障数据安全。

3. 数据库管理系统(DBMS)

定义:位于用户应用程序与操作系统之间的系统软件,负责对数据库进行统一管理与控制,是数据库系统的核心。

核心功能

  • 数据定义:支持用户通过 SQL 语句创建、修改、删除数据库及表结构(CREATE/ALTER/DROP)。
  • 数据操作:实现数据的增删改查(INSERT/DELETE/UPDATE/SELECT)。
  • 数据控制:管理用户权限、保障数据安全(授权、回收权限)。
  • 数据维护:提供数据备份、恢复、索引优化、日志管理等功能。常见 DBMS 类型
  • 关系型 DBMS:基于关系模型(二维表),如 Oracle、DB2、SQL Server、MySQL、SQLite。
  • 非关系型 DBMS:基于键值、文档、列族等模型,如 Redis、MongoDB、Cassandra(适用于嵌入式场景的多为轻量级关系型)。

二、数据库体系分类与选型

1. 按应用规模分类

类型 代表产品 核心特点 适用场景
大型数据库 Oracle、IBM DB2 支持海量数据(TB/PB 级)、高并发、复杂事务处理、跨平台、企业级架构 银行、金融、大型企业核心系统
中型数据库 MySQL、Microsoft SQL Server 兼顾性能与易用性,支持中小型企业业务,开源 / 商业版可选,适配多操作系统 电商、政务、中小企业管理系统
小型数据库 SQLite、Berkeley DB 体积极小、无需独立服务、嵌入式集成度高、资源占用低 嵌入式设备、移动应用、单机程序

2. 嵌入式数据库核心选型对比

嵌入式场景需兼顾资源占用、响应速度、集成难度,以下为主流选型深度对比:

数据库名称 开发 / 归属方 核心特性 嵌入式适配性 适用场景
SQLite D. Richard Hipp 开源 C 语言实现,零配置、单文件存储、支持 ACID 事务、兼容 SQL92 标准,体积仅 250KB 极高(轻量级、无依赖) 移动 APP、嵌入式设备、单机程序
Firebird 开源社区 关系型、支持存储过程 / 触发器、多版本并发控制(MVCC),体积稍大 中(需一定资源) 功能复杂的嵌入式系统、小型服务器
Berkeley DB Sleepycat Software(Oracle) 键值存储模型、无服务器架构、直接链接应用程序,支持高并发读写 极高(极简架构) 缓存系统、配置存储、轻量数据存取
eXtremeDB McObject 内存数据库、运行效率极高、支持实时事务,可定制化部署 高(高性能需求) 工业控制、实时嵌入式系统、车载设备

三、SQLite 核心基础

1. SQLite 核心特性详解

SQLite 是嵌入式关系型数据库的标杆,其特性远超基础认知,具体如下:

  1. 零配置部署:无需安装服务、无需启动后台进程,直接调用 API 即可使用,彻底解决嵌入式设备 "部署复杂" 痛点。
  2. 单文件存储:整个数据库(表、索引、视图、触发器)封装为单个磁盘文件,便于迁移、备份(直接复制文件即可完成备份)。
  3. 跨平台共享:数据库文件支持大端 / 小端字节序机器间自由共享,适配嵌入式设备多架构(ARM、x86、RISC-V)部署。
  4. 轻量高效
    • 源码约 3 万行 C 代码,编译后仅 250KB~500KB,内存占用极低。
    • 数据操作速度优于多数同类数据库,单表查询、增删改响应时间达微秒级。
  5. 完整事务支持:严格遵循 ACID(原子性、一致性、隔离性、持久性)原则,支持事务回滚、崩溃恢复,保障数据安全。
  6. 全 SQL 兼容:支持绝大多数 SQL92 标准,包括索引、触发器、视图、存储过程(简化版),降低开发迁移成本。
  7. 容量上限 :单数据库文件最大支持2TB存储,满足绝大多数嵌入式场景数据需求。

2. SQLite 与传统数据库的核心差异

对比维度 SQLite 传统数据库(MySQL/Oracle)
架构模式 嵌入式库(直接链接应用程序) 客户端 - 服务器模式(独立服务进程)
部署复杂度 零配置,无依赖 需安装、配置、启动服务
资源占用 极低(内存 / CPU / 磁盘) 较高(适配高并发、海量数据)
并发能力 单写多读(写操作独占锁) 多读写并发(MVCC / 锁机制)
适用场景 单机 / 嵌入式 / 移动应用 企业级、高并发、分布式系统

3. SQLite 安装与环境配置(全平台)

(1)Linux 系统安装
  • 在线安装(Ubuntu/Debian)

    复制代码
    # 更新软件源
    sudo apt update
    # 安装sqlite3及开发库(含头文件,用于C语言编程)
    sudo apt-get install sqlite3 libsqlite3-dev
  • 在线安装(CentOS/RHEL)

    复制代码
    sudo yum install sqlite3 sqlite3-devel
  • 本地安装

    1. 从 SQLite 官网(https://www.sqlite.org/download.html)下载对应架构的源码包(如sqlite-autoconf-3450100.tar.gz)。

    2. 解压并编译安装:

      复制代码
      tar -zxvf sqlite-autoconf-3450100.tar.gz
      cd sqlite-autoconf-3450100
      ./configure --prefix=/usr/local/sqlite
      make && sudo make install
    3. 配置环境变量(永久生效):

      复制代码
      echo "export PATH=/usr/local/sqlite/bin:$PATH" >> /etc/profile
      source /etc/profile
(2)Windows 系统安装
  1. 官网下载预编译包(sqlite-dll-win32-x86-3450100.zip/sqlite-dll-win64-x64-3450100.zip)。
  2. 解压后将sqlite3.exe添加到系统环境变量(Path),即可在命令行直接使用。
  3. 开发集成:将sqlite3.lib添加到项目库目录,sqlite3.h添加到头文件目录。
(3)嵌入式设备(ARM / 嵌入式 Linux)
  1. 交叉编译源码:指定交叉编译器(如arm-linux-gnueabihf-gcc)编译生成适配设备架构的sqlite3可执行文件和库文件。
  2. 移植到设备:通过 NFS/SCP 将可执行文件拷贝到设备/usr/bin目录,库文件拷贝到/lib目录。

4. SQLite3 核心命令

(1)系统命令(.开头)
命令 功能描述
.help 查看所有系统命令帮助文档
.quit / .exit 退出 SQLite3 命令行模式
.schema [表名] 查看指定表的创建语句(含字段类型、约束);无参数则查看全库表结构
.databases 查看当前打开的所有数据库(显示数据库名、存储路径)
.table 列出当前数据库下所有数据表
.mode [模式] 设置数据输出模式(column列模式、list列表模式、jsonJSON 模式)
.header on/off 开启 / 关闭查询结果的表头显示(默认关闭)
.nullvalue [字符] 设置 NULL 值的显示字符(默认空,例:.nullvalue NULL
.backup [库名] [文件] 备份整个数据库到指定文件
.restore [库名] [文件] 从指定文件恢复数据库
(2)SQL 核心命令(标准 SQL)

基本的 sql 命令,不以 . 开头,但是都要 ; 结尾

创建一张数据库的表 stu

复制代码
create table stu(id Integer,name char,score Integer);

插入一条记录

复制代码
insert into stu values(1001,'zhangsan',80);

插入部分字段记录

复制代码
insert into stu(name,score) values(1002,'lisi');

查询所有记录

复制代码
select *from stu;

查询数据库部分内容字段

复制代码
select name,score from stu;

根据属性查询

复制代码
select * from stu where score=80;

删除一条记录

复制代码
delete from stu where id=1001;

更新一条记录

复制代码
update stu set name='wangwu' where score=90;

添加一列

复制代码
alter table stu add column address char;

删除一列

1.创建一张表(提取字段)

复制代码
create table stu1 as select id,name,score from stu;

2.删除原有表

复制代码
drop table stu;

3.将新的表的名字改成原有的表名字

复制代码
alter table stu1 rename to stu;
相关推荐
YMatrix 官方技术社区2 小时前
美国·硅谷|YMatrix 即将亮相 Postgres Conference 2026,前瞻 AI 时代的数据基座
数据库·数据仓库·postgresql·时序数据库·ymatrix
bKYP953cL2 小时前
构建自己的AI编程助手:基于RAG的上下文感知实现方案
数据库·人工智能·ai编程
Bert.Cai2 小时前
MySQL DML简介
数据库·mysql
maqr_1102 小时前
HTML怎么生成订单预览_HTML只读订单信息结构【操作】
jvm·数据库·python
2301_803875612 小时前
如何通过phpMyAdmin给WordPress所有用户发送全站通知_系统表插入
jvm·数据库·python
2301_777599373 小时前
mysql如何进行数据库容量规划_评估磁盘空间增长趋势
jvm·数据库·python
NineData3 小时前
NineData 亮相香港国际创科展 InnoEX 2026,以 AI 加速布局全球市场
运维·数据库·人工智能·ninedata·新闻资讯·玖章算术
m0_377618233 小时前
Redis怎样应对大规模集群的重启风暴_分批次重启节点并等待集群状态恢复绿灯后再继续操作
jvm·数据库·python
imuliuliang4 小时前
存储过程(SQL)
android·数据库·sql