提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
一、数据库基本概念
1.介绍
关系型数据库语言-----------类似EXECL
非关系型数据库--------------类似JSON,键值对
SQL (struct query language):结构化查询语言,
专业术语:
ddl,data defination language 建表
dml,新增,删除,删除一行 data modifty language
dql,查询 data query language
2.分类
大型 | 中型 | 小型 |
---|---|---|
ORACLE | MYSQL/MSSQL | SQLITE DBII powdb |
3.名词
DB 数据库
DBMS 数据库管理系统
MIS 管理信息系统
OA 办公自动化
4.嵌入式数据库:
优点:
1.开源,c语言开发
2.代码量少1万行左右,总大小10M以内
3.绿色软件无需安装
4.文件类型数据库,可以行动
5.数据库容量大2T
二、sqlite3安装
1.安装
(1)在线安装
sudo apt-get install sqlite3
sudo apt-get install libsqlite3-dev
验证否安装成功:
sqlite3 --version
sqlite3 --help
(2)源码安装
1.将源码安装包放在指定路径下
2.解压压缩包
3../configure(脚本检查配置文件)生成makefile
4.make生成可执行程序(编译)
5.sudo make installl(安装)
2.创建数据库
数据库文件是以.db结尾
1.touch xxx.db
2.sqlite3 xxx.db
3.进入数据库
4.数据库配置命令
1.databse查看数据保存信息,如果没有退出重新创建
2.exit数据库退出
3.是否显示表头信息
4.查看数据库表,键值信息
5.查看数据库中所有表的信息
5.sql语句
注意:所有的sql语句都以';'结尾。
创建一个表:ddl
显示表头:.header on
数据类型:
int char(短文本) text(长文本)real(浮点类型)blob(二进制数据)
(1)创建表:
crate table 表名(数据名+数据类型);
eg:
create table user(id int ,name char,age int);
create table user1(id int,name char,pssswd char);
(2)删除表:
drop table 表名;
eg:drop table user;
(3)增:
增加表内全部数据:
insert into 表名 values(数据依次填入);
增加表内部分数据:
insert into 表名(变量名依次填入)values(数据依次填入);
(4)查:
查询表中所有数据;
select *from 表名;
满足一定条件查询:
select *from 表名where 或者 like;
两个条件的组合用and
通配符%,0~任意多个字符
通配符_,代表只有一个字符
查找带顺序:
select * from user order by age;
select * from user order by age desc;
eg:
select id,name from user where not age <30
where name like '三一' % _
(5)改:
update 表名 set 表字段 = 值 满足条件:
eg: update user set id = 1 where name = 'li';
update user set id = 1 where name = "li" and passwd = "123";
update user set id = 2 where name = "li" or name = "zhao";
(6)删:
delect from表名 满足条件;
eg:delete from user ; ///删除表中所有数据
delete from user where id = 1; ///删除id=1 的数据;
delete from user where id =1 and name = "zhang";
delete from user where id = 1 or id = 2;
(7)时间列
datatime
insert into user1 values(2,'lisi',datetime('now','+8 hours'));
去年的时间:
insert into user1 values(3,'lisi',datetime('now','+8 hours','-1 year'));
查询一整年的数据:
select * from user1 where dt >='2020-01-01 00:00:00' and dt <= '2020-12-31 23:59:59';
(8)自动增长列
CREATE TABLE user3(id INTEGER PRIMARY KEY ASC,name char,age int,dt datetime);
insert into user3 (NULL,'李四',23,datetime('now'));
5.数据库维护命令
1.数据的导出
sqlite3 xx.db .dump > xx.sql 输出重定向。
将数据库名称为xxx的数据库整体导出到脚本中
2.数据的导出
sqlite3 xxx.db < xxx.sql 输入重定向
3.安装可视化工具
sudo apt-get install sqliteman
三、数据库编程函数
1.编程框架
1.打开数据库
2.读写数据库(增删改查)
3.关闭数据库
2.函数接口
1.打开数据库
int sqlite3_open(char * path,sqlite3 ** db);
功能:打开指定path路径+文件名称的数据库,并将
打开的地址指向db变量的句柄。
参数:path 要打开的数据库路径+名称
db 要打开的数据库地址指针
返回值:成功 0
失败 -1;
2.关闭数据库: sqlite3_close
int sqlite3_close(sqlite3 *db);
功能:关闭指定的数据库
参数:要关闭的数据库地址
返回值:成功 0
失败 -1;
3.数据库操作
查询操作:sqlite3_get_table(); select
int sqlite3_get_table(sqlite3 *db,char *sql,
char *** rest,int *nrow,int *ncol,
char ** errmsg);
功能:在db数据库上执行sql查询语句,并将执行的
结果集返回到rest地址上,同时返回查询的行和列。
参数:db 要执行查询语句的数据库
sql 要执行的select查询语句
rest 查询的结果集是一个三级指针
nrow 查询的结果的行数
ncol 查询的结果的列数
errmsg 如果执行有错误,则存储错误。
返回值:成功 0
失败 非0;
执行sql语句:sqlite3_exec(); insert delete update
int sqlite3_exec(sqlite3 *db,char *sql,callback fun,
void * arg,char ** errmsg);
功能:在db数据库上执行sql 非查询语句。
并将结果返回。
参数:db 要执行sql的数据库
sql 要执行的非查询sql语句。
fun 如果该函数要执行查询语句,则该回调函数
用来回收查询的结果。
arg 回调函数的参数,如果没有回调函数则该参数为NULL;
errmsg 执行过程中的错误信息。
返回值:执行成功 0
失败 非0 ;
回调函数:为了将反馈结果
int fun(void *arg ,int f_num,char ** f_value,
char ** f_name)
功能:该函数用于sqlite3_exec执行select语句的
结果集返回数据。
参数:arg 由sqlite3_exec传入的参数
f_num 执行该命令所返回测结果集的字段个数。
f_value 查询结果集中的字段的值。
f_name 查询结果集中的字段的名称。
返回值:成功 0
失败 非0
注意:该回调函数必须有返回值,否则可能导致查询异常。