在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支持四种基础数据类型:
- INTEGER:整型数字
- REAL:浮点小数
- TEXT:文本字符串
- 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;
多表联合查询
当我们的数据分散在多张表里时,就需要使用连接查询,主要分为三种:
- cross join 交叉连接:把两张表所有记录做笛卡尔积组合
select 学生信息.姓名 as 姓名, 课程信息.名称 as 课程, 课程信息.学分 as 学分 from 学生信息 cross join 课程信息; - inner join 内连接:只保留两张表匹配上的数据
select 学生信息.姓名 as 姓名, 成绩信息.成绩 as 成绩 from 学生信息 inner join 成绩信息 on 学生信息.ID = 成绩信息.学生ID; - outer join 外连接:以一张表为主,保留主表全部数据,匹配不到的字段显示NULL,常用left outer join。
select 学生信息.姓名 as 姓名,成绩信息.成绩 as 成绩 from 学生信息 left outer join 成绩信息 on 学生信息.ID = 成绩信息.学生ID;
C语言调用SQLite接口
我们写C程序时,可以使用sqlite提供的C接口来操作数据库。
- sqlite3_open():打开数据库文件
int sqlite3_open(
const char filename, / Database filename (UTF‑8) */
sqlite3 *ppDb / OUT: SQLite db handle */
);
filename:数据库文件名
ppDb:输出参数,存放数据库句柄的地址
返回值:成功返回SQLITE_OK
- 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:存放错误信息
- sqlite3_close():关闭数据库连接
int sqlite3_close(sqlite3*);
结束语
SQLite作为轻量级数据库,不需要额外的服务端,一个文件就是完整数据库,非常适合入门练习。上面整理的都是基础语法,熟练掌握建表、增删改查、多表连接,就可以完成大部分简单的数据管理工作。如果需要在C语言项目中使用数据库,就可以调用sqlite提供的API接口。