目录
- [一、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数据库核心知识点总结
本文整理自学习笔记,涵盖
select与epoll的区别,以及 SQLite 数据库的命令行操作、SQL 语法和 C 语言 API 接口。
一、select 与 epoll 的区别
1. select 特点
- 底层结构 :监听的文件描述符集合本质是一个数组,有上限限制(FD_SETSIZE)。
- 数据拷贝 :fd 集合在应用层,每次调用都需要从用户态拷贝到内核态,事件发生时内核需通知用户态,资源开销大。
- 触发模式 :只能工作在水平触发(LT,低速模式)。
- 事件查找:需要用户手动遍历查找产生事件的文件描述符。
2. epoll 特点
- 容量 :监听的事件表没有上限限制。
- 内核机制 :事件表在内核中维护,内核直接监听,无需频繁完成用户层和内核层空间的拷贝,减少资源开销。
- 触发模式 :支持水平触发 LT(默认,低速模式) 和边沿触发 ET(高速模式)。
- 事件获取 :可以自动获得产生事件的文件描述符(通过
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 语句。callback:SELECT语句使用的回调函数(对找到的数据进行处理)。void*:回调函数的传参。errmsg:错误信息存储空间的首地址。
- 返回值 :成功返回
SQLITE_OK,失败返回错误码。
3. 关闭数据库:sqlite3_close
int sqlite3_close(sqlite3*);
- 功能:关闭数据库连接。
总结
- IO 模型 :高并发场景优先使用
epoll(尤其配合 ET 模式 + 非阻塞 IO),性能远优于select。 - SQLite:轻量级嵌入式数据库,适合端侧/单机应用;掌握点命令、基础 SQL 及 C API 即可快速上手。