从零开始学 SQLite:从基础命令到 C 语言编程实战

一、数据库

高效对大批量数据管理的一种软件
二、分类:

关系型数据库

Oracle

Mysql

SQLServer

SQLite

非关系型数据库

Redit
三、SQLite数据库

所有数据库支持:SQL编程语言
四、SQLite数据库的安装:

  1. 虚拟机网络连通

  2. apt-get工具集配置成功

  3. 安装SQlite软件

sudo apt-get install sqlite3

sudo apt-get install libsqlite3-dev

sudo apt-get install sqlitebrowser

navicat

  1. 运行sqlite3软件

sqlite3

SQLite version 3.22.0 2018-01-22 18:45:57

Enter ".help" for usage hints.

Connected to a transient in-memory database.

Use ".open FILENAME" to reopen on a persistent database.

sqlite> .quit

五、Sqlite3命令

  1. .databases

查看数据库中的信息

  1. .tables

查看表名称

  1. .header(s) ON|OFF

开启/关闭头部显示

  1. .mode MODE

设置数据的显示格式

csv

column

html

insert

line

list

tabs

tcl

  1. .schema ?TABLE?

显示创建表时的格式

  1. .quit

退出
六、SQL语句

  1. create table

CREATE TABLE 表名称

(

列名称1 数据类型,

列名称2 数据类型,

列名称3 数据类型,

....

)

例:create table student (学号 integer primary key, 姓名 text, 性别 text,年龄 integer, 成绩 integer);

  1. drop table

drop table 表名称;

例:drop table student;

  1. insert into

INSERT INTO 表名称 VALUES (值1, 值2,....)

例:insert into student values (1002, "李四", "女", 13, 80);

insert into student (学号,姓名,性别) values (1009, "熊大", "男");

  1. delete from

DELETE FROM 表名称 WHERE 列名称 = 值

例:delete from student where 姓名 = "赵五";

  1. update

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

例:update student set 年龄=16,成绩=85 where 姓名="熊大";

  1. select

SELECT 列名称 FROM 表名称

例:select * from student;

select 学号,成绩 from student;

select 姓名 from student where 成绩<60 and 性别="男";

select 姓名 from student where 姓名 like "%田%";

  1. order by

ORDER BY 语句用于根据指定的列对结果集进行排序

例:select 学号,姓名 from student where 成绩 > 60 order by 成绩 desc;

select 学号,姓名 from student where 成绩 > 60 order by 成绩 asc;

七、SQL类型

  1. INTEGER

  2. REAL

  3. TEXT
    八、多表联合查询

  4. cross join

例:select 学生信息.姓名 as 姓名, 学生课程.名称 as 课程 from 学生信息 cross join 学生课程;

  1. inner join

例:select 学生信息.姓名 as 姓名, 学生成绩.成绩 as 成绩 from 学生信息 inner join学生成绩 on 学生信息.学号 = 学生成绩.学号;

  1. outer join

select 学生信息.姓名 as 姓名, 学生成绩.成绩 as 成绩 from 学生信息 left outerjoin 学生成绩 on 学生信息.学号 = 学生成绩.学号;

  1. 三表联合查询

select 学生信息.姓名 as 姓名, 学生课程.名称 as 课程, 学生成绩.成绩 as 成绩

from 学生信息 left outer join 学生成绩 on 学生信息.学号 = 学生成绩.学号

left outer join 学生课程 on 学生成绩.课程编号 = 学生课程.编号

where 成绩 > 60

order by 成绩 desc;

九、数据库编程

  1. sqlite3_open

int sqlite3_open(

const char *filename, /* Database filename (UTF-8) */

sqlite3 **ppDb /* OUT: SQLite db handle */

);

功能:

打开数据库获得操作数据库的句柄

参数:

filename:打开文件的路径

ppDb:存放数据库句柄空间的首地址

返回值:

成功返回SQLITE_OK

失败返回错误码,可以通过sqlite3_errmsg来获得其对应的英文描述

  1. sqlite3_errmsg

const char *sqlite3_errmsg(sqlite3*);

功能:

传入sqlite3的句柄返回句柄出错的英文字符串

  1. sqlite3_exec

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 */

);

功能:

执行一条SQL语句

参数:

数据库句柄

要执行的sql语句

callback:只有select才会用到,执行找到匹配的数据后的操作

对callback回调函数的传参

errmsg:存放出错字符串空间的首地址

返回值:

成功返回SQLITE_OK

失败返回错误码

  1. sqlite3_free

void sqlite3_free(void*);

功能:

释放申请的空间

  1. sqlite3_close

int sqlite3_close(sqlite3*);

功能:

关闭sqlite3连接句柄

-----使用示例

相关推荐
Databend1 天前
在 AWS 中国峰会逛了一天,我在 Databend 展台看到了 Agent 数据基础设施的新思路
数据库·人工智能·agent
ClouGence2 天前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
飞将2 天前
从零实现数据库(2)——HashIndex + IndexManager
数据库
兵慌码乱3 天前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
Nturmoils3 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波3 天前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
兵慌码乱4 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
倔强的石头_4 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_7 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab8 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm