Linux IO多路复用与SQLite数据库核心知识点总结

目录

  • [一、select 与 epoll 的区别](#一、select 与 epoll 的区别)
    • [1. select 特点](#1. select 特点)
    • [2. epoll 特点](#2. epoll 特点)
  • 二、数据库基础
    • [1. 数据库概念](#1. 数据库概念)
    • [2. 数据库分类](#2. 数据库分类)
    • [3. 安装 SQLite(Ubuntu/Debian)](#3. 安装 SQLite(Ubuntu/Debian))
  • [三、SQLite 命令行常用命令(点命令)](#三、SQLite 命令行常用命令(点命令))
  • [四、SQL 语句基础](#四、SQL 语句基础)
    • [1. SQLite 支持的数据类型](#1. SQLite 支持的数据类型)
    • [2. 创建表(CREATE TABLE)](#2. 创建表(CREATE TABLE))
    • [3. 插入数据(INSERT INTO)](#3. 插入数据(INSERT INTO))
    • [4. 查询(SELECT)](#4. 查询(SELECT))
    • [5. WHERE 子句(匹配条件)](#5. WHERE 子句(匹配条件))
    • [6. 更新(UPDATE)](#6. 更新(UPDATE))
    • [7. 删除(DELETE)](#7. 删除(DELETE))
    • [8. 排序(ORDER BY)](#8. 排序(ORDER BY))
    • [9. 删除表(DROP TABLE)](#9. 删除表(DROP TABLE))
  • 五、多表联合查询(JOINS)
  • [六、SQLite C 语言 API 接口](#六、SQLite C 语言 API 接口)
    • [1. 打开数据库:sqlite3_open](#1. 打开数据库:sqlite3_open)
    • [2. 执行 SQL:sqlite3_exec](#2. 执行 SQL:sqlite3_exec)
    • [3. 关闭数据库:sqlite3_close](#3. 关闭数据库:sqlite3_close)
  • 总结

Linux IO多路复用与SQLite数据库核心知识点总结

本文整理自学习笔记,涵盖 selectepoll 的区别,以及 SQLite 数据库的命令行操作、SQL 语法和 C 语言 API 接口。


一、select 与 epoll 的区别

1. select 特点

  1. 底层结构 :监听的文件描述符集合本质是一个数组,有上限限制(FD_SETSIZE)。
  2. 数据拷贝 :fd 集合在应用层,每次调用都需要从用户态拷贝到内核态,事件发生时内核需通知用户态,资源开销大
  3. 触发模式 :只能工作在水平触发(LT,低速模式)
  4. 事件查找:需要用户手动遍历查找产生事件的文件描述符。

2. epoll 特点

  1. 容量 :监听的事件表没有上限限制
  2. 内核机制 :事件表在内核中维护,内核直接监听,无需频繁完成用户层和内核层空间的拷贝,减少资源开销
  3. 触发模式 :支持水平触发 LT(默认,低速模式)边沿触发 ET(高速模式)
  4. 事件获取 :可以自动获得产生事件的文件描述符(通过 epoll_wait 返回就绪列表)。

二、数据库基础

1. 数据库概念

能够对大批量数据进行增删改查管理的软件。

2. 数据库分类

类型 存储方式 常见产品
关系型数据库 数据存放在文件中 Oracle、MySQL、SQLite
非关系型数据库 数据存放在内存中(内存数据库) Redis、NoSQL

3. 安装 SQLite(Ubuntu/Debian)

复制代码
sudo apt-get install sqlite3

三、SQLite 命令行常用命令(点命令)

命令 作用
.tables 查看表名称
.databases 列出附加数据库的名称和文件
.headers on/off 开启/关闭列名称显示
.mode 设置数据显示的形式
.schema ?TABLE? 查看表创建的信息
.width 设置显示的宽度

四、SQL 语句基础

1. SQLite 支持的数据类型

  • INTEGER:整型
  • REAL:浮点型
  • TEXT:文本字符串
  • BLOB:二进制大对象

2. 创建表(CREATE TABLE)

复制代码
create table 表名 (列名称1 数据类型1, 列名称2 数据类型2, ...);
-- 示例
create table student (
id integer,
name text,
sex text,
age integer,
score integer
);

3. 插入数据(INSERT INTO)

复制代码
-- 全列插入
insert into 表名 values (值1, 值2, ...);
-- 指定列插入
insert into 表名 (列1, 列2) values (值1, 值2);
-- 示例
insert into student values (1, "张三", "男", 18, 90);
insert into student values (3, "王二", NULL, NULL, NULL);
insert into student (id, name, sex) values (4, "赵五", "男");

4. 查询(SELECT)

复制代码
select 列名称1, 列名称2, ... from 表名;
-- 示例:查询所有
select * from student;

5. WHERE 子句(匹配条件)

运算符 说明
= 等于
<> 不等于
> / < 大于 / 小于
>= / <= 大于等于 / 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式(通配符 %
复制代码
select name, score from student where name like "赵%";
select name from student where score >= 90;
select name, score from student where name like "赵%" and score > 95;

6. 更新(UPDATE)

复制代码
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;
-- 示例
update student set score=91 where name="赵五";

7. 删除(DELETE)

复制代码
delete from 表名称 where 列名称 = 值;
-- 示例
delete from student where name = "王二";

8. 排序(ORDER BY)

  • asc:升序(默认)

  • desc:降序

    select name, score from student where sex="男" order by score desc;

9. 删除表(DROP TABLE)

复制代码
drop table 表名称;
-- 示例
drop table student;

五、多表联合查询(JOINS)

  • cross join:交叉连接(笛卡尔积)

  • inner join:内连接(交集)

  • outer join:外连接(左/右/全外连接,SQLite 主要支持 left outer join

    -- 1. cross join 交叉连接
    select 学生信息.姓名 as 姓名, 课程信息.名称 as 课程, 课程信息.学分 as 学分
    from 学生信息 cross join 课程信息;
    -- 2. inner join 内连接
    select 学生信息.姓名 as 姓名, 成绩信息.成绩 as 成绩
    from 学生信息
    inner join 成绩信息 on 学生信息.ID = 成绩信息.学生ID;
    -- 多表内连接
    select 学生信息.姓名 as 姓名, 课程信息.名称 as 课程, 成绩信息.成绩 as 成绩
    from 学生信息
    inner join 成绩信息 on 学生信息.ID = 成绩信息.学生ID
    inner join 课程信息 on 成绩信息.课程ID = 课程信息.ID;
    -- 3. outer join 外连接(左外连接)
    select 学生信息.姓名 as 姓名, 成绩信息.成绩 as 成绩
    from 学生信息
    left outer join 成绩信息 on 学生信息.ID = 成绩信息.学生ID;


六、SQLite C 语言 API 接口

1. 打开数据库:sqlite3_open

复制代码
int sqlite3_open(
    const char *filename,   /* Database filename (UTF-8) */
    sqlite3 **ppDb          /* OUT: SQLite db handle */
);
  • 功能:打开数据库文件。
  • 参数
    • filename:数据库文件名。
    • ppDb:存放数据库句柄空间的首地址。
  • 返回值 :成功返回 SQLITE_OK

2. 执行 SQL:sqlite3_exec

复制代码
int sqlite3_exec(
    sqlite3*,                                  /* An open database */
    const char *sql,                           /* SQL to be evaluated */
    int (*callback)(void*, int, char**, char**), /* Callback function */
    void *,                                    /* 1st argument to callback */
    char **errmsg                              /* Error msg written here */
);
  • 功能:执行一条 SQL 语句。
  • 参数
    • sqlite3*:数据库句柄。
    • sql:要加载的 SQL 语句。
    • callbackSELECT 语句使用的回调函数(对找到的数据进行处理)。
    • void*:回调函数的传参。
    • errmsg:错误信息存储空间的首地址。
  • 返回值 :成功返回 SQLITE_OK,失败返回错误码。

3. 关闭数据库:sqlite3_close

复制代码
int sqlite3_close(sqlite3*);
  • 功能:关闭数据库连接。

总结

  • IO 模型 :高并发场景优先使用 epoll(尤其配合 ET 模式 + 非阻塞 IO),性能远优于 select
  • SQLite:轻量级嵌入式数据库,适合端侧/单机应用;掌握点命令、基础 SQL 及 C API 即可快速上手。

相关推荐
GeW1 小时前
RHCE通关秘籍:从零基础到高分拿证的5个加速器
linux
前端世界1 小时前
基于 Linux 的本地 AI 智能问答平台搭建实践 —— Ollama + FastAPI + Nginx 实现本地大模型 Web 服务
linux·运维·人工智能
倔强的石头1061 小时前
【Linux指南】动静态库系列(七):符号表与重定位:链接器如何把函数调用接起来
linux·前端·javascript
山岚的运维笔记1 小时前
mysql 专业笔记 -- 第 8 章:使用变量
运维·数据库·笔记·后端·学习·mysql·dba
聚美智数1 小时前
网安查询-备案查询-网络安全查询API接口介绍
网络·数据库·web安全
坐吃山猪2 小时前
【多线程】Semaphore使用
java·数据库·oracle·多线程
数智启示录2 小时前
PostgreSQL 内存调优实战(第 12 篇):work_mem 只调大 64 倍,峰值为什么远不止 64 倍
运维·数据库·经验分享·postgresql·面试
平原20182 小时前
GPT Image 2 / Nano Banana API成本拆解:$0.0081、84.7%与单张有效成本
linux·服务器·gpt
T1mzhou2 小时前
ARM64 Linux 6.10内核启动流程2-rootfs 怎么挂上
linux·服务器·前端