数据库软件
关系型数据库:
Mysql (开源,中型数据库)
Oracle (大型数据库)
SqlServer
Sqlite (小型,嵌入式,手机,相机)
非关系型数据库:
Redis
NoSQL
1.数组、链表、文件、数据库
数组、链表: 内存存放数据的方式(代码运行结束、关机数据丢失)
文件、数据库: 外存存放数据的方式(代码运行结束、关机数据不会丢失)
文件:数据量很小 处理效率很低
数据库:数据量很大 处理数据(增删改查)效率高
DB 数据库 select update database
DBMS 数据库管理系统
MIS 管理信息系统
OA 办公自动化
sqlite3 www.sqlite.org www.kernal.org GNU 的开源软件
特点:
1、开源 C语言开发
2、代码量少 1万行左右,总大小10M以内
3、绿色软件无需安装
4、文件型数据库,可以移动。
5、数据容量最大 2T
安装sqlite数据库:
1.让虚拟机能够上网
2.apt-get工具集配置好
3.sudo apt-get install sqlite3
sudo apt-get install libsqlite3-dev 软件开发包
gcc test.c -lsqlite3 -lpthread
验证是否安装成功:
sqlite3 --version
sqlite3 --help
4.启动sqlite3
sqlite3
5.输入.quit退出
SQL语言
struct query langluage 结构化查询语言 只能用在关系型数据库
不区分大小写。大小写都可以用
一些常用的sql命令
.help查看
- .database 列出当前库和系统中那个文件在关联
- .tables 列出当期数据库中的所有表 (类似 ls)
- .schema xxx 查看指定表的结构:
- .dump user ===>导出数据库
- .headers on 显示表头的标签
1.CREATE TABLE 语句用于创建数据库中的表。
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
创建名为 "Person" 的表。
该表包含 5 个列,列名分别是:"Id_P"、"LastName"、"FirstName"、"Address" 以及 "City":
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
空的 "Persons" 表类似这样:
Id_P | LastName | FirstName | Address | City |
|
|
|
|
|
删除一个表:
drop table 表名;
eg:drop table user;
插入时间列 int int;
unicode
datetime就是一个数据类型
创建表的时候就给时间 弄一列
CREATE TABLE user1(id int,name char,age int,dt datetime);'2022-07-01 19:00:00'
insert into user1 values (2,'张三',23,datetime('now','+8 hours'));
自动增长列
sqlite> CREATE TABLE user3(id INTEGER PRIMARY KEY ASC,name char,age int,dt datetime); “主键” 给每行取个编号 主键 的信息不能重复 ,用主键查询速度更快
sqlite> insert into user3 (NULL,'李四',23,datetime('now')); 之后这个元素填NULL 他就会自动填入
2.增——INSERT INTO 语句用于向表格中插入新的行。
INSERT INTO 表名称 VALUES (值1, 值2,....)
insert into 表名 (字段名称)values(值)
向表中增加数据:
insert into 表名 (字段名称 ) values (值名称);
eg:insert into user (id,age) values (1,10);
insert into user values(3,"wang",11);
insert into user (age) values ( 12);
出现 ...>
说明一行没有输入完 只有结尾写上 ; 才会算输入一行
原表:
LastName | FirstName | Address | City |
Carter | Thomas | Changan Street | Beijing |
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing');
插入后:
LastName | FirstName | Address | City |
Carter | Thomas | Changan Street | Beijing |
Gates | Bill | Xuanwumen 10 | Beijing |
在指定的列中插入数据:
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');
LastName | FirstName | Address | City |
Carter | Thomas | Changan Street | Beijing |
Gates | Bill | Xuanwumen 10 | Beijing |
Wilson |
| Champs-Elysees |
|
3.删——DELETE 语句用于删除表中的行。
DELETE FROM 表名称 WHERE 列名称 = 值
LastName | FirstName | Address | City |
Gates | Bill | Xuanwumen 10 | Beijing |
Wilson | Fred | Zhongshan 23 | Nanjing |
DELETE FROM Person WHERE LastName = 'Wilson';
LastName | FirstName | Address | City |
Gates | Bill | Xuanwumen 10 | Beijing |
删除所有行
DELETE FROM table_name
4.改——修改表中的数据
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";
5.查——看表中的数据
select 列名 from 表名 条件;
eg:select * from user ; 查看user中所有的内容
select id from user;
select id,name from user where not age <30
select id,name from user where name like '三一' % _ 通配符
select *from user where age>20 or age<50 order by age desc ; 排序
order by 排序
默认 asc 升序 从小到大
desc 逆序 从大到小
数据库维护命令:
1、数据的导出:
sqlite3 xxx.db .dump > xxx.sql
//将数据库名称为xxx的数据库整体导出到脚本中。
2、数据的导入:
sqlite3 xxx.db < xxx.sql
3、可视化工具安装:
sudo apt-get install sqlitebrowser
C语言 调用数据库
sqlite3 数据库编程接口:
1、需要的头文件
sqlite3.h
2、编译过程
-lsqlite3
3、编程框架:
打开数据库 ==》读写数据库(增,删,改,查) ==》关闭数据库
sqlite3.h
1 打开数据库: sqlite3_open
int sqlite3_open(char * path,sqlite3 ** db);
功能:打开指定path路径+文件名称的数据库,并将
打开的地址指向db变量的句柄。
参数:path 要打开的数据库路径+名称
db 要打开的数据库地址指针
返回值:成功 0
失败 -1;
2 关闭数据库: sqlite3_close
int sqlite3_close(sqlite3 *db);
功能:关闭指定的数据库
参数:要关闭的数据库地址
返回值:成功 0
失败 -1;
3 数据库操作:sqlite_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 */
);
功能:
执行一条SQL语句
参数:
sqlite3*: 数据库句柄
sql: 要执行的SQL语句字符串首地址
callback: 只有在select时才会使用,其余调用时传递NULL
void*: 给回调函数的传参
errmsg:出错信息存放空间首地址(使用完毕后使用sqlite3_free释放空间)
返回值:
成功返回SQLITE_OK
失败返回错误码
查询操作: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;
向数据库的表中插入一行数据:
#include<stdio.h>
#include<sqlite3.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
sqlite3 *db;
int ret = sqlite3_open("./text1.db",&db);
if(SQLITE_OK != ret)
{
fprintf(stderr,"open error:%s\n",sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
char sql_cmd[] = "insert into user values(7,'LUBU',22);";
char *errmsg;
ret = sqlite3_exec(db,sql_cmd,NULL,NULL,&errmsg);
if(SQLITE_OK != ret)
{
fprintf(stderr,"open error:%s\n",errmsg);
sqlite3_free(errmsg);
sqlite3_close(db);
return 1;
}
return 0;
}