今天是学习嵌入式的第39天

数据库

咱们先说数据库是干啥的,简单讲,就是专门用来大批量增删改查数据的软件,不用咱们自己对着一堆txt文件瞎折腾。

数据库分两大派系:

  1. 关系型数据库:数据存在文件里,代表选手 Oracle、MySQL、SQLite。咱们这节课重点学SQLite,轻量小巧,嵌入式经常用。

  2. 非关系型数据库:数据放内存里,读写飞快,也叫内存数据库,代表Redis,属于NoSQL。

在Linux装SQLite超级简单,一条命令搞定:sudo apt-get install sqlite3

SQLite里的点命令(以.开头,不是SQL语句,是shell工具命令)

• .tables 查看当前数据库里所有表名

• .databases 列出现在打开的数据库名字和对应的文件

• .headers on/off 控制要不要显示表头,打开之后查询结果会带上列名,看着舒服

• .mode 改查询结果的显示格式

• .schema ?TABLE? 查看某张表的创建语句,看看表结构

• .width 调整输出内容的显示宽度,防止文字挤在一起

SQL语句核心内容

1、SQLite支持的数据类型

• INTEGER:整数

• REAL:小数(浮点数)

• TEXT:文本字符串,名字、性别这种文字就用它

• BLOB:二进制原始数据,图片、文件这类二进制东西存这里

2、建表 create table

用来创建一张新表,语法:create table 表名 (列名1 类型, 列名2 类型,...);

例子:create table student (id integer, name text, sex text, age integer, score integer);

直接建一张学生表,存学号、姓名、性别、年龄、分数。

3、插入数据 insert into

往表格里面新增记录。

两种写法:

  1. 给全部列填数据:insert into student values (1, "张三", "男", 18, 90);

  2. 只给指定几列填,剩下留空:insert into student (id, name, sex) values (4, "赵五", "男");

没填的字段就会变成NULL,代表空值。

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; 找分数90分及以上的同学

6、update 更新修改数据

修改表里已经存在的数据,一定要加where!不然整张表全部数据都会被改掉,大型翻车现场

语法:update 表名 set 列名 = 新值 where 列名=某个值;

例子:update student set score=91 where name="赵五"; 把赵五的分数改成91。

7、delete 删除数据

删除记录,同样!必须写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 student; 直接把student这个表连根删掉,表结构+里面所有数据一起消失,谨慎使用!

多表联合查询(多张表一起查)

三种join连接方式:

  1. cross join 交叉连接:两张表所有行两两配对,笛卡尔积,数据量直接爆炸,一般很少用。

  2. inner join 内连接:最常用。只拿出两边能匹配上的数据,两边都存在的记录才会显示。比如学生表和成绩表,只有有成绩的学生才会查出来。

  3. outer join 外连接,这里例子是left outer join左连接:左边表全部数据保留,右边表匹配不到的地方填NULL。哪怕学生没有成绩,学生信息也会显示出来。

SQLite的C语言函数接口(嵌入式重点!)

三个核心函数,嵌入式开发操作数据库就靠这仨:

  1. sqlite3_open:打开数据库文件。参数是数据库文件名,还有一个数据库句柄指针。成功打开返回SQLITE_OK。

  2. sqlite3_exec:执行SQL语句。参数有数据库句柄、SQL字符串、回调函数、传给回调的参数、错误信息指针。

回调函数就是select查询的时候,拿到数据之后,你自己写的处理函数。执行成功返回SQLITE_OK,失败返回错误码。

  1. sqlite3_close:关闭数据库连接。用完数据库一定要关,不然资源泄漏。

提醒:

update、delete语句,where条件千万不能忘!不加where,要么全表更新,要么全表清空,手滑直接删库,属于经典背锅事故。

SQLite本身轻量,很适合嵌入式设备,这也是咱们通信/嵌入式方向学它的原因。

相关推荐
yi0118 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
_upupup9 小时前
Linux的调试工具——gdb/cgdb
linux·服务器
JeJe同学9 小时前
Docker镜像导入、容器启动
linux·运维·docker
Jason_zhao_MR10 小时前
Linux与实时控制如何兼得
linux·嵌入式硬件·机器人·工业控制
闲云野鹤在人间10 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
李日华大战鸡红11 小时前
FOC状态空间方程模型推导(学习记录)
python·学习·线性代数
灯澜忆梦11 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
小蒋观天下11 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
一个风轻云淡11 小时前
GCC 和 GDB命令简单解读
java·linux·前端
Evand J11 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab