今天是学习嵌入式的第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本身轻量,很适合嵌入式设备,这也是咱们通信/嵌入式方向学它的原因。

相关推荐
AR-26710-1 小时前
Linux Day8——FHS文件系统层次
linux
qq_297670871 小时前
Ubuntu 打开系统应用老弹密码?三步彻底关闭免密
linux
Omics Pro1 小时前
AI药物研发10原则!欧盟EMA×美国FDA
数据库·人工智能·算法·机器学习·自然语言处理
杨云龙UP1 小时前
DB2 HADR 主备切换实战:SQL1639N 认证问题、备库只读与双向 Takeover
linux·运维·数据库·db2·主备切换·角色互换
冬奇Lab2 小时前
DeepSeek Harness 系列(10):写一个完整的 dsh 插件——从需求到上线
人工智能·学习·开源
边境悍匪2 小时前
蜗牛学苑 Java 智能体学习 Day44|Vue 前端项目搭建 思维导图复盘
java·开发语言·spring boot·学习·阿里云
wabs6662 小时前
关于二叉树【力扣100.相同的树的思考】
数据结构·c++·算法·leetcode·二叉树·递归法
知知之之2 小时前
敏感数据查询:SHA-256 还是 HMAC-SHA256
算法