网络(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接口。

相关推荐
kyrie_sakura1 小时前
MySQL数据库学习笔记3--关联(联合)查询
数据库·学习·mysql
陈皮波比茶2 小时前
计算机二级MySQL笔记
java·数据库
行业研究员2 小时前
腾讯云数据库 PostgreSQL 让相关子查询跑上多核
数据库·postgresql·腾讯云
zzzll11112 小时前
LangChain 1.3 新特性详解与实战指南
java·数据库·langchain
石小千2 小时前
MySQL 8.4设置密码策略
数据库·mysql
神明不懂浪漫2 小时前
【第四章】索引——B+树、回表,加快数据库的查找能力的利器
开发语言·数据结构·数据库·经验分享·笔记·b树
zcmodeltech3 小时前
智慧矿山沙盘模型多场景控制系统设计——基于STM32与Modbus RTU的智能开采、无人矿卡、数字孪生全场景联动方案
数据库·stm32·单片机·嵌入式硬件·物联网