知识点1:基础命令
安装数据库
sudo apt-get install sqlite3
数据库层次的命令
sqlite3 bj2401.db //创建并打开数据库
.quit .exit .q //退出数据库
rm bj2401.db//删除数据库
mv bj2401.db bj2401_new.db //修改数据库名字
ls //查询数据库
数据表层次的命令
语法:create table 表名称 (列名称 1 数据类型, 列名称 2 数据类型, 列名称 3 数据类型//创建数据表
eg:create table person(id int,name text);
.table //查看数据表名
.schema //查看数据表创建信息(列信息)
alter table 表名 rename to 新表名; //修改数据表表名
alter table 表名 add 列名 列类型; //修改数据表增加列
alter table 表名 drop 列名 ; //修改数据表删除列
drop table 表名; //删除数据表
数据层次的命令
insert into 表名 values (列值 1, 列值 2, 列值 3...); //增加数据
insert into 表名 (列名称...) values (列值 1, 列值 2, 列值 3...); //增加数据
select * from 表名; //查看数据(注意where通用)
update 表名 set name="peter" where id=2;
//修改数据
delete from 表名 [匹配条件] //删除数据
总结:
跟mysql有区别的地方(1、数据库增删改查 2、数据表查改)
知识点2 :进阶命令
2.1函数与聚合
2.2数据分组 group by
select 列名 1[, 列名 2, ...] from 表名 group by 列名
2.3过滤分组 having
除了能用 group by 分组数据外,还可以包括哪些分组,排除哪些分组。例如:查看班级平均分大于 90 的班级
语法:select 函数名(列名 1)[, 列名 2, ...] from 表名 group by
2.4约束
管理如何插入或处理数据库数据的规则
常用约束分类主键(primary key)、唯一约束(unique)、检查约束(check)
2.5联结表(多表操作)
保存数据时往往不会将所有数据保存在一个表中,而是在多个表中存储,联结表就是从多个表中查询数据。
2.6视图(虚拟表)
作用:简化复杂的sql语句。
语法:create view 视图名 as 语句
drop view 视图名;
2.7触发器
SQLite 的触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行调用
语法:create trigger 触发器名 [before|after] [insert|update|delete] on 表名
begin 语句;
2.8索引(查询优化)
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。空间换时间。
知识点3 :编程
1、打开数据库
2、关闭数据库
3、操作数据库
方式1:(回调方式)
方式2:(非回调方式)
案例1:回调方式操作数据库
#include <stdio.h>
#include "sqlite3.h"
int flag=0;
int data_callback(void * para, int n_column,char **column_value, char **column_name)
{
int i=0;
//printf("n_column=%d\n",n_column);
if(flag==0){
for(i=0;i<n_column;i++){
printf("%s ",column_name[i]);
}
printf("\n");
}
for(i=0;i<n_column;i++){
printf("%s ",column_value[i]);
}
printf("\n");
flag++;
return 0;
}
int main(){
//1、打开数据库
sqlite3 *db=NULL;
sqlite3_open("bj2401.db",&db);
//2、操作数据库
//sqlite3_exec(db,"create table code_table (id int,name text,age int);",NULL,NULL,NULL);
sqlite3_exec(db,"insert into code_table values(2,'lucy',10);",NULL,NULL,NULL);
sqlite3_exec(db,"select * from code_table;",data_callback,NULL,NULL);
//3、关闭数据库
sqlite3_close(db);
return 0;
}
案例2:非回调方式操作数据库
#include <stdio.h>
#include "sqlite3.h"
int main(){
//1、打开数据库
sqlite3 *db=NULL;
char **result=NULL;
int nrow=0;
int ncloumn=0;
sqlite3_open("demo.db",&db);
//2、操作数据库
//sqlite3_get_table(db,"create table code_table (id int,name text,age int);",&result,&nrow,&ncloumn,NULL);
//sqlite3_get_table(db,"insert into code_table values(1,'lucy',10);",&result,&nrow,&ncloumn,NULL);
sqlite3_get_table(db,"select * from code_table;",&result,&nrow,&ncloumn,NULL);
if(result != NULL){
printf("nrow=%d,ncloumn=%d\n",nrow,ncloumn);
int i,j;
for(i=0;i<nrow+1;i++){
//输出一行内容
for(j=0;j<ncloumn;j++){
printf("%s ",result[i*ncloumn+j]);//i=0,result=012;i=1,result=345;i=2,result=678
}
printf("\n");
}
}
sqlite3_free_table(result);
//3、关闭数据库
sqlite3_close(db);
return 0;
}