数据库——基础概念与 SQLite 实践

目录

一、数据库的核心概念

[二、SQLite 概述](#二、SQLite 概述)

1.核心特性

2.典型应用场景

[三、SQLite 的安装与编译](#三、SQLite 的安装与编译)

[1.安装(Linux 系统)](#1.安装(Linux 系统))

[2.编译(C 语言程序)](#2.编译(C 语言程序))

[四、SQLite 操作指令与 SQL 语句](#四、SQLite 操作指令与 SQL 语句)

[1.SQLite 终端指令](#1.SQLite 终端指令)

[2.常用 SQL 语句](#2.常用 SQL 语句)

[2.1 表结构操作](#2.1 表结构操作)

[2.2 数据操作](#2.2 数据操作)

[五、C 语言操作 SQLite](#五、C 语言操作 SQLite)


数据库是用于集中存储、高效统计及规范化管理数据(包含新增、查询、修改、删除等操作)的系统,其核心价值在于解决数据分散存储、管理效率低、一致性差的问题,不仅适用于服务器级别的业务系统,也能部署在智能手环、智能家居等嵌入式设备中,实现本地数据的轻量化管理。

一、数据库的核心概念

数据库的层级逻辑结构可分为:库→表→记录→字段,各层级的含义如下:

  • 库:一个独立的数据库容器,可包含多个表;
  • 表:数据库中存储数据的基本单元,对应一类业务对象(如 "用户表""订单表");
  • 记录:表中的一行数据,对应一个具体的业务实体(如某一个用户的信息);
  • 字段:表中的一列数据,对应业务实体的一个属性(如用户的 "ID""姓名""年龄")。

按部署规模与场景,常用数据库可分为三类:

  • 大型数据库:以 ORACLE 为代表,适用于高并发、大容量的企业级业务系统;
  • 中型数据库:以 MySQL、MSSQL 为代表,是互联网应用、中小企业系统的常用选择;
  • 小型数据库:以 SQLite、DBII 为代表,主打轻量、嵌入式场景。

此外,数据库领域的常见术语包括:

  • DB:数据库(即数据存储的容器);
  • DBMS:数据库管理系统(用于操作和管理数据库的软件工具);
  • MIS:管理信息系统(基于数据库构建的业务管理平台);
  • OA:办公自动化(依托数据库实现流程、文档等办公数据的管理)。

二、SQLite 概述

SQLite 是一款轻量级嵌入式数据库,凭借其极简、灵活的特性,成为嵌入式场景与小型应用的主流选择,核心特性及应用场景如下:

1.核心特性

  1. 开源免费,基于 C 语言开发,跨平台兼容性强;
  2. 体积极致轻量化:代码量仅约 1 万行,编译后整体体积小于 10M;
  3. 无依赖部署:属于绿色软件,无需安装,仅需单个动态库或静态库即可运行;
  4. 文件型存储:整个数据库对应一个物理文件,可直接复制、移动,便于数据迁移;
  5. 存储容量充足:单库最大支持 2T 数据存储,满足多数小型场景需求。

2.典型应用场景

  • 移动端应用:Android、iOS App 的本地数据存储(如聊天记录、缓存信息);
  • 嵌入式设备:智能家居、工业控制器中的配置数据、运行日志存储;
  • 小型工具:本地笔记、轻量管理工具的离线数据管理。

三、SQLite 的安装与编译

1.安装(Linux 系统)

执行以下命令完成安装:

bash 复制代码
sudo apt-get install sqlite3  # 安装SQLite工具
sudo apt-get install libsqlite3-dev  # 安装开发依赖库

2.编译(C 语言程序)

编写 C 语言代码后,通过以下命令编译(以 sqli.c 为例):

bash 复制代码
gcc test.c -lsqlite3  # 链接libsqlite3库,生成可执行文件

四、SQLite 操作指令与 SQL 语句

1.SQLite 终端指令

打开终端,执行sqlite3 数据库名.db(如sqlite3 user.db)即可进入 SQLite 交互环境,常用指令及作用如下:

  • .database:查看当前连接的数据库对应的物理文件路径;
  • .table:列出当前数据库中已创建的所有表;
  • .schema 表名:查看指定表的创建语句(若不指定表名,则显示所有表的结构);
  • .q/.quit/.exit:退出 SQLite 交互环境;
  • .header on:开启查询结果的表头显示(便于查看字段对应关系)。

2.常用 SQL 语句

SQL 语句是操作数据库的标准语言,在 SQLite 中需以分号结尾,核心操作及示例如下:

2.1 表结构操作

  • 创建表:定义表的字段及数据类型
sql 复制代码
create table user(id int, name char, age int); 
-- 创建user表,包含id(整数)、name(字符)、age(整数)字段
  • **删除表:**删除指定表(需谨慎操作,数据将被清空)
sql 复制代码
drop table user;
-- 删除user表

2.2 数据操作

  • 插入数据:向表中添加一条记录
sql 复制代码
insert into user values(3,"wang",11);
-- 向user表插入一条记录:id=3、name=wang、age=11
  • 查询数据 :从表中筛选指定数据

    • 基础查询:
    sql 复制代码
    select * from user where age>20 or age<50;
    -- 查询user表中年龄>20或<50的所有记录(*代表所有字段)
    • 模糊查询(使用LIKE操作符):
      • 通过通配符匹配字符串,常用通配符包括:
        • _:代表一个任意字符;
        • %:代表任意多个任意字符;
    sql 复制代码
    select * from user where name like 'zhang_'; 
    -- 匹配name以zhang开头、后接1个任意字符的记录(如zhang1、zhangA)
    
    select * from user where name like 'zhang%'; 
    -- 匹配name以zhang开头、后接任意字符的记录(如zhang、zhangsan、zhang123)
  • **修改数据:**更新表中已有的记录

sql 复制代码
update user set id = 1 where name = 'li';
-- 将user表中name为li的记录,id修改为1
  • 删除数据:删除表中指定记录
sql 复制代码
delete from user where id = 1 or id = 2;
-- 删除user表中id为1或2的记录

五、C 语言操作 SQLite

通过 C 语言操作 SQLite 的核心流程为:

  1. 打开数据库(sqlite3_open)
  2. 执行 SQL 语句(sqlite3_exec)
  3. 关闭数据库(sqlite3_close)

示例代码如下(向 user 表插入数据):

cpp 复制代码
#include <stdio.h>
#include <sqlite3.h>

int main(int argc, char** argv)
{
    sqlite3* db = NULL;
    // 1. 打开数据库
    int ret = sqlite3_open("123.db", &db);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3_open: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }

    char* errmsg = NULL;
    // 2. 执行SQL语句
    char sql_cmd[512] = "insert into user values(6,'zhangsan',21);";
    ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3_exec: %s\n", errmsg);
        sqlite3_free(errmsg);
        sqlite3_close(db);
        return 1;
    }

    // 3. 关闭数据库
    sqlite3_close(db);
    return 0;
}
相关推荐
猫咪很可爱18 分钟前
Oracle RAC 启动失败排查:私网通信与内核参数优化实战
运维·数据库·oracle
XLYcmy32 分钟前
《数字经济赋能城市低碳治理的路径研究检索报告》审阅与修改指导意见——基于完整检索报告体例的完整性诊断、学术规范核查与方法论纠偏 上
数据库·ai·chatgpt·文心一言·检索·知网·豆包
泡海椒40 分钟前
JQuick-SQL 快速开始:注册内存表并执行查询
数据库·windows·sql
ss2731 小时前
PG实战笔记 | 09 PostgreSQL psql客户端基本操作
数据库·笔记·postgresql
电商API_180079052471 小时前
反向海淘多币种结算:汇率该在哪个时点被冻结
java·开发语言·数据库·跨境电商·1688 api
搞AI的金鱼2 小时前
skill agent workflow的区别
数据库
墨子夕2 小时前
创新的潮汐——从科学发现到资本周期的百年规律(第二卷)
大数据·数据库·人工智能
Y3815326622 小时前
印度电商数据采集教程:用 SerpBase 查 Flipkart/Myntra/Ajio 商品(附代码)
数据库·python
企业数字化笔记2 小时前
多租户配额怎么控制?用量口径、并发预留与超额处理的实现方法
java·数据库·spring boot
roman_日积跬步-终至千里3 小时前
【数据Agent论文·查询与语义|06】RAT-SQL:怎样把问题、表和字段真正关联起来?
数据库·sql·数据分析