sqlite数据库===>SQL
0、介绍
1、数据库的安装
1.1 拷贝压缩包 sqlite-autoconf-3080500.tar 到linux虚拟机中
1.2 解开压缩包 ===》 tar -zxvf sqlite-autoconf-3080500.tar.gz
1.3 进入到解开的目录 sqlite-autoconf-3080500 中,cd sqlite-autoconf-3080500
1.4 ./configure
1.5 make
1.6 suduo make install
验证是否安装成功: 在命令行输入 sqlite3 回车 出现sqlite>表示安装成功。
可以用 .q 退出数据库系统
如果屏幕出现 ....> 输入 ; 在输入 .q 退出
如果没有以上提示,或者出现两行很长的MD5值,意味着安装过程中版本异常
whereis sqlite3
cp ./sqlite3 /usr/bin/
cp ./sqlite3 /usr/sbin/
chmod 777 /usr/local/bin/sqlite3
之后再次验证是否能成功启动:在命令行输入 sqlite3 回车 出现sqlite>表示安装成功。
可以用 .q退出数据库系统
注意:数据库中的基本单位是表,可以在数据库中创建多个表,每个表可以单独在,也可以互相之间有关联。
每个表的基本单位是行和列
数据库的设计三范式:
第一范式: 所有的列唯一
第二范式: 所欲的行唯一
第三范式: 数据内容的无冗余
2、数据库的常规使用 ====>所有的sqlite数据库管理命令都是以: . 开始
常规数据库管理命令;===》只针对sqlite数据库有效。
2.0 首先在启动数据库系统过程中创建数据库
===》sqlite3 xxx.db ===>表示手工创建一个名称为xxx.db的数据库
2.1 .help 来查看当前系统支持的所有管理命令
2.2 .quit = .q 表示退出当前系统
2.3 .database 显示当前打开的数据库文件
2.4 .tables 显示数据库中所有的表名====》如果没有任何记录表示数据库中无表
2.5 .schema xxx 显示当前数据库中xxx表的表结构
常规的数据库操作命令:====》使用SQL 语言操作,兼容所有支持SQL语言的数据库
注意:所有的该部分的操作都必须以 ; 结尾,否则程序会继续等待输入知道出现 ;
0、创建一个数据库 ===》touch test.db ===》创建一个数据库文件
====》sqlite3 test.db ===》创建的同时打开数据库
注意:所有的sql语句都支持 -- 开头的注释,表示一行无效
/* */ 表示多行注释,类似C 语言
1、创建表
create table xxx (f1 types, f2 type2,....);
eg: create table test (id int, name txt,class int);
其中:列字段的类型有如下几种:
int 整形 txt 字符串 blob 二进制类型 real 数字
2、删除表:
drop table xxx;
3、增加记录
insert into xxx (f1,f2....) values (v1,v2,v3...);
eg: insert into test (id,name) values (1,"abc");
insert into xxx values(v1,v2...);
eg:insert into test values (2,"def",3);
4、删除记录
delete from xxx ;=====》删除xxx表中所有数据。
delete from xxx where id = x; ====>根据id的值来指定删除
delete from xxx where id = x and name = "zhang";
5、查询记录
select * from xxx; ====>查询xxx表中所有数据
select id from xxx; ===>只查询xxx表中的id列数据
select id,name from xxx; ===>查询xxx表中指定的id和name列数据。
6、改变记录 = 删除记录+增加记录
练习:要求 手工创建一个数据库,并设计一个独立的用户表t_user,该表的字段必须包含 id,name,age
依次插入5个不同身份的用户到表中,并用selelct查询显示。
删除其中id为 奇数的记录,并最后显示其他剩余的用户信息。
可视化的工具
批量导入导出
导入: sqlite3 test.db < test.sql
导出: sqlite3 test.db .dump > test2.sql
3、数据库编程接口
头文件:sqlite3.h
编译过程: -lsqlite3
打开数据库 ====》操作数据库(查询动作,插入删除动作) =====》关闭数据库
3.1 打开数据库
int sqlite3_open(char * path, sqlite3 **db)
功能:打开指定的path路径下的数据库
参数:path 数据库文件所在的路径+文件名
db 数据库类型指针,打开之后与该数据库关联
返回值:成功0
失败 非0
3.2 关闭数据库
int sqlite3_close(sqltie3 *db);
参数: db 要关闭的数据库指针
返回值:成功 0 失败 非0
3.3 操作数据库
查询动作: sqlite3_get_table()
int sqltie3_get_table(sqlite3 *db ,const char *sql,char ***rest,
int * row, int * col,char **errmsg);
功能:通过以上函数可以从指定的db数据库中根据sql所表示的sql语句执行。
并将结果rest返回,row表示最终查询的结果行数,col表示最终查询
的结果列,errmsg 如果错误则存储错误信息。
参数:db 要查询的数据库
sql 要执行的查询sql语句,一般用select开始
rest 返回的结果集指针
row 返回的结果中的行数
col 返回的结果中的列数
errmsg 存储错误信息
返回值:成功 0
失败 错误码
修改动作: sqlite3_exec()
int sqlite3_exec(sqlite3 *db,const char *sql,slqite3_callback callback,
void *arg, char ** errmsg);
功能:该函数可以执行任何针对数据库操作的sql语句。
参数: db 要操作的数据库指针
sql 要执行的sql语句 ===》注意:如果该语句是select 查询语句则callback有效
如果该语句是insert 或者delete则callback可以不用。
callback 回调函数
arg 回调函数的 参数
errmsg 存储错误信息
返回值:成功 0
失败 非0
回调函数:typedef int (*sqlite3_callback)(void * arg,int n,char **f_value,char **f_name);
功能:当该函数被调用的时候表示有数据执行结果返回并存储到f_value和f_name中。
参数:arg 从外部传入的参数
n 查询结果中包含的列的个数
f_value 行的值
f_name 列的值
返回值:成功 0
失败 -1
练习:手工创建一个数据库并设计一个t_user 表。
用代码方式插入5 条记录
并最后的所有信息打印输出到终端。