数据库——基础概念与 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;
}
相关推荐
点云SLAM2 小时前
Boost中Graph模块中boost::edge_capacity和boost::edge_capacity_t
数据库·算法·edge·图论·最大团·最大流算法·boost库使用
五阿哥永琪2 小时前
Redis的常用数据结构
数据结构·数据库·redis
猴子年华、2 小时前
【每日一技】:SQL 常用函数实战速查表(函数 + 场景版)
java·数据库·sql·mysql
远方16092 小时前
110-Oracle中核心业务的年度分区表建立
数据库·oracle·database
__风__2 小时前
PostgreSQL 约束延迟触发
数据库·postgresql
月明长歌2 小时前
MySQL数据库约束:把“能插入”升级成“插入就对”
数据库·mysql·oracle
·云扬·3 小时前
InnoDB Cluster 常见管理命令
数据库·mysql
筵陌3 小时前
MySQL内置函数
数据库·mysql
黎明破晓.3 小时前
MySQL基础
数据库·mysql