前言
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。
分类
数据库可以分为三种
小型:sqlite —嵌入式数据库
中型:mysql
大型:db2
数据库的设计
sqlite xx.db (有则打开,无责创建)
touch xx.db
4.2 创建数据库表 ===》行列式表格,可以创建多个;
首先登录数据库 sqlite3 xxx.db
1.系统命令:以.开头命令(对框的操作)
.help 查看帮助
.exit 退出
.database 查看当前的数据库的信息
.table 查看数据库中表的信息
.schema 表名 查看指定表结构 //学号 姓名 年龄 分数
.2创建表:
create table 表名(
列名1 数据类型 约束,
列名2 数据类型 约束
);
其中注意 sqlite3的语句必须是以分号结尾的(;)结尾的
约束:
primary key:主键,一个列的唯一标识符,该列数据必须是唯一,且不能为空
not null:非空,不能为空
null:默认约束,可以省略不写,代表该列数据可以为空
数据类型:
int 整型
varchar(长度) 字符串
decimal(10,2) 小数,(总长度,小数位的长度) 99999999.99
bit:布尔值, 只接受0或1
char(长度) 字符串
text:长文本
/*例子:
create table stu_info(
id int primary key,
name char(20) not null,
age int null,
score decimal(4,1)
);
*/
4.3 表的增加 删除 修改 查询操作:SQL 语句
增:insert into 表名(列名,列名,...) values (值1,值2,...);
eg: insert into user(id,name,pass) values (1,"zhangsan","123456");
insert into user values(2,"abc",123);
insert into user(id) values (3);
//如果不写列名的话,就按照定义时候的顺序来插入
//注意:如果是字符串需要使用''引号,如果表名后没有跟列名则数据顺序必须是按照表顺序
//不能为空的列必须有实际的数据添加,可以为空列如果不想加数据用null占位
查:select 列名 from 表名称 [条件];
eg: select * from user;
select id from user;
select id,pass from user;
select * from user where id = 1;
select * from user where id > 2;
select * from user where id > 1 and name = "abc";
select * from user where id < 10 or id > 20;
select id,name from user where age > 11;
查询出的数据是有序:
select * from 表 order by 列名 asc(默认升序,降序是desc);
改:update 表名称 set 列名 = 值 [条件];
eg:
update user set pass = "8888" where id = 1;
update user set pass = "777" ; ///注意 会全表修改为777密码
update user set pass = "666" where id>3; ///注意:会修改所有>3的id记录数据
update user set pass = "666" ,name = "abc" where id = 1;
update user set pass = "555" where id > 1 and name = "ccc";
update user set pass = "777" where id >1 and id < 1; //???
删: delete from 表名称 [条件];
eg: delete from user where id = 1; ///正常删除一行记录
delete from user where id >3;
delete from user where id > 3 and score <60;
delete from user; ///注意:全表数据清空
drop table user; ///注意:表删除
数据库的表的增、删、修、查:基本格式:
insert into
delete from
update set
select from
逻辑运算:and(&&) or(||) not(!)
注意:
为空的数据查询条件不能用=
is null
is not null
数据库的表批量处理:数据库脚本 ===》xxx.sql
1、数据库的脚本导出:
sqlite3 xxx.db .dump > xxx.sql
单表导出:
sqlite>.output xxx.sql
slqite>.dump xxx 要导出的表名称
sqlite>.q
会在当前目录下自动创建一个xxx.sql存储的是xxx单表的数据内容。
2、数据库的脚本导入:
sqlite3 xxx.db < xxx.sql
sqlite3 的编程接口:
sqlite3中C语言开发接口函数:
头文件:<sqlite3.h>
编译时加上链接库:-lsqlite3
打开:
int sqlite3_open(
const char filename, / Database filename (UTF-8) */
sqlite3 *ppDb / OUT: SQLite db handle */
);
功能:该函数可以用于打开指定路径+名称的sqlite3数据库;
参数:filename 要打开的数据库路径+名称;
ppdb 打开之后的数据库句柄;
返回值:成功 0
失败 -1;
关闭:
int sqlite3_close(sqlite3 *db);
功能:关系已经打开的数据库;
参数:db要关闭的数据库句柄
返回值: 成功 0
失败-1;
操作:查询
int sqlite3_get_table(
sqlite3 db, / An open database */
const char zSql, / SQL to be evaluated */
char **pazResult, / Results of the query */
int pnRow, / Number of result rows written here */
int pnColumn, / Number of result columns written here */
char *pzErrmsg / Error msg written here */
);
功能:该函数主要用于对数据库中指定表的查询操作;
参数:db 已经打开的数据库句柄 == sqlite3_open的参数2 的值;
zSql 表示要在数据库中执行的sql语句,一般是select语句;
pazResult 结果集,表示最终查询的结果地址;
pnRow 结果集中数据的行个数;
pnColum 结果集中数据的列个数;
pzErrmsg 查询异常的信息记录;
返回值:成功 0
失败 -1;
操作:通用
int sqlite3_exec(
sqlite3db, / An open database /
const char sql, / SQL to be evaluated /
int (callback)(voidarg,int,char,char**), /* Callback function /
void * arg, / 1st argument to callback */
char *errmsg / Error msg written here */
);
功能:该函数用于数据库中所有的常规操作,主要用于可能改动数据的
增加 删除 修改操作。
参数: db 要执行操作的数据库句柄;
sql 要执行的sql操作语句,主要是 insert delete update
callback 回调函数指针,只用于查询的时候生效。
arg 回调函数的第一个参数;
errmsg 执行sql的异常信息;
返回值:成功 0
失败-1
回调函数:callback 用于sqlite3_exec执行查询语句的是调用;
int (callback)( voidarg,int num ,char** va,char**na), /* Callback function */
参数:arg 由外部sqtlie3_exec的传入的参数;
num 执行sql语句的结果个数;
va 执行sql之后的数据值
na 执行sql之后的数据列名称
返回值: 成功 0
失败 -1 ;
注意:该回调函数在每查询到一条记录就执行一次;