网络(5)数据库

在Linux环境中,数据库是处理大批量数据增删改查的重要工具。今天来学习SQLite相关知识。

数据库简单来说,就是用来管理大量数据的软件。数据库主要分为两大类:关系型数据库与非关系型数据库。

关系型数据库会把数据存储在文件当中,常见的有Oracle、MySQL、SQLite;非关系型数据库大多把数据存放在内存中,代表有Redis、Nosql。我们今天重点学习的SQLite,属于轻量级的关系型数据库,很适合在Linux下做简单的数据存储练习。

SQLite的安装

在Ubuntu系统中,只需要一条命令就可以完成安装:

sudo apt‑get install sqlite3

SQLite基础命令

进入sqlite交互界面之后,可以使用下面这些点开头的命令,来查看数据库状态:

.tables:查看数据库里所有表的名称

.databases:列出附加数据库的名称和对应的文件

.headers on/off:开启或者关闭查询结果的列名显示

.mode:设置数据显示的格式

.schema ?TABLE?:查看表的创建信息

.width:设置输出显示的宽度

这类带点的命令是SQLite的内置命令,不属于标准SQL语句。

标准SQL语句

1.支持的数据类型

SQLite支持四种基础数据类型:

  1. INTEGER:整型数字
  2. REAL:浮点小数
  3. TEXT:文本字符串
  4. 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 student values (1, "张三", "男", 18, 90);

insert into student values (3, "王二", NULL, NULL, NULL);

insert into student (id, name, sex) values (4, "赵五", "男");

可以看到,插入的时候可以指定部分列,没有赋值的字段会为NULL。

4.查询数据 select

select 列名称1,列名称2,... from 表名;

*代表查询表中全部字段:

select * from student;

5.where条件子句

使用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;

多表联合查询

当我们的数据分散在多张表里时,就需要使用连接查询,主要分为三种:

  1. cross join 交叉连接:把两张表所有记录做笛卡尔积组合
    select 学生信息.姓名 as 姓名, 课程信息.名称 as 课程, 课程信息.学分 as 学分 from 学生信息 cross join 课程信息;
  2. inner join 内连接:只保留两张表匹配上的数据
    select 学生信息.姓名 as 姓名, 成绩信息.成绩 as 成绩 from 学生信息 inner join 成绩信息 on 学生信息.ID = 成绩信息.学生ID;
  3. outer join 外连接:以一张表为主,保留主表全部数据,匹配不到的字段显示NULL,常用left outer join。
    select 学生信息.姓名 as 姓名,成绩信息.成绩 as 成绩 from 学生信息 left outer join 成绩信息 on 学生信息.ID = 成绩信息.学生ID;
    C语言调用SQLite接口

我们写C程序时,可以使用sqlite提供的C接口来操作数据库。

  1. sqlite3_open():打开数据库文件
    int sqlite3_open(
    const char filename, / Database filename (UTF‑8) */
    sqlite3 *ppDb / OUT: SQLite db handle */
    );
    filename:数据库文件名

ppDb:输出参数,存放数据库句柄的地址

返回值:成功返回SQLITE_OK

  1. sqlite3_exec():执行一条SQL语句
    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 /
    );
    sqlite3
    :已经打开的数据库句柄

sql:要执行的SQL语句

callback:查询语句的回调函数,用来处理查询出来的数据

errmsg:存放错误信息

  1. sqlite3_close():关闭数据库连接
    int sqlite3_close(sqlite3*);
    结束语

SQLite作为轻量级数据库,不需要额外的服务端,一个文件就是完整数据库,非常适合入门练习。上面整理的都是基础语法,熟练掌握建表、增删改查、多表连接,就可以完成大部分简单的数据管理工作。如果需要在C语言项目中使用数据库,就可以调用sqlite提供的API接口。

相关推荐
老纪的技术唠嗑局1 小时前
把 seekdb 塞进 iOS App:让混合检索嵌入手机
数据库
ClouGence2 小时前
开源数据库管理工具 CloudDM 新版本发布,支持 OpenSearch、IoTDB 数据源
数据库·开源
徐小黑ACG3 小时前
Redis-基础
数据库·redis·缓存
火山引擎开发者社区3 小时前
案例实践 | 让 Agent 读懂业务口径:ContextSearch 在广告数据查询中的实践
数据库
10年前端老司机4 小时前
Milvus 8种检索能力实践
数据库·python·agent
Decay__4 小时前
14_MySQL 高可用与容灾架构 —— MGR / InnoDB Cluster / Keepalived+VIP / 双主 / 读写分离 / 两地三中心
运维·数据库·sql·mysql·架构
freejackman5 小时前
【实战三】撕开脱敏盲区:深度解析 CASE WHEN 与窗口函数血缘
大数据·数据库·sql
codigger7 小时前
线上数据库连接池打满:从应急止损到架构根治的完整方案
数据库·sql·程序员
倔强的石头_7 小时前
集中式与分布式怎么选?我把手头11套系统重新过了一遍秤
数据库
挖掘狂人7 小时前
线上数据库连接池打满:从应急止损到架构根治的完整方案
数据库·sql·程序员