数据库
咱们先说数据库是干啥的,简单讲,就是专门用来大批量增删改查数据的软件,不用咱们自己对着一堆txt文件瞎折腾。
数据库分两大派系:
-
关系型数据库:数据存在文件里,代表选手 Oracle、MySQL、SQLite。咱们这节课重点学SQLite,轻量小巧,嵌入式经常用。
-
非关系型数据库:数据放内存里,读写飞快,也叫内存数据库,代表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
往表格里面新增记录。
两种写法:
-
给全部列填数据:insert into student values (1, "张三", "男", 18, 90);
-
只给指定几列填,剩下留空: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连接方式:
-
cross join 交叉连接:两张表所有行两两配对,笛卡尔积,数据量直接爆炸,一般很少用。
-
inner join 内连接:最常用。只拿出两边能匹配上的数据,两边都存在的记录才会显示。比如学生表和成绩表,只有有成绩的学生才会查出来。
-
outer join 外连接,这里例子是left outer join左连接:左边表全部数据保留,右边表匹配不到的地方填NULL。哪怕学生没有成绩,学生信息也会显示出来。
SQLite的C语言函数接口(嵌入式重点!)
三个核心函数,嵌入式开发操作数据库就靠这仨:
-
sqlite3_open:打开数据库文件。参数是数据库文件名,还有一个数据库句柄指针。成功打开返回SQLITE_OK。
-
sqlite3_exec:执行SQL语句。参数有数据库句柄、SQL字符串、回调函数、传给回调的参数、错误信息指针。
回调函数就是select查询的时候,拿到数据之后,你自己写的处理函数。执行成功返回SQLITE_OK,失败返回错误码。
- sqlite3_close:关闭数据库连接。用完数据库一定要关,不然资源泄漏。
提醒:
update、delete语句,where条件千万不能忘!不加where,要么全表更新,要么全表清空,手滑直接删库,属于经典背锅事故。
SQLite本身轻量,很适合嵌入式设备,这也是咱们通信/嵌入式方向学它的原因。