sqlite数据库

知识点1:基础命令

安装数据库

sudo apt-get install sqlite3

数据库层次的命令

sqlite3 bj2401.db     //创建并打开数据库
.quit   .exit   .q    //退出数据库
rm bj2401.db//删除数据库
mv bj2401.db bj2401_new.db //修改数据库名字
ls //查询数据库

数据表层次的命令

sqlite数据库_数据库

sqlite数据库_sqlite_02

语法: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 表名 [匹配条件]  //删除数据

sqlite数据库_SQLite_03

总结:

跟mysql有区别的地方(1、数据库增删改查 2、数据表查改)

知识点2 :进阶命令

2.1函数与聚合

sqlite数据库_SQLite_04

sqlite数据库_数据库_05

sqlite数据库_sqlite_06

sqlite数据库_数据库_07

2.2数据分组 group by

select 列名 1[, 列名 2, ...] from 表名 group by 列名

sqlite数据库_数据库_08

2.3过滤分组 having

除了能用 group by 分组数据外,还可以包括哪些分组,排除哪些分组。例如:查看班级平均分大于 90 的班级

语法:select 函数名(列名 1)[, 列名 2, ...] from 表名 group by

sqlite数据库_数据库_09

2.4约束

管理如何插入或处理数据库数据的规则

常用约束分类主键(primary key)、唯一约束(unique)、检查约束(check)

sqlite数据库_SQLite_10

sqlite数据库_sqlite_11

sqlite数据库_数据库_12

sqlite数据库_数据库_13

2.5联结表(多表操作)

保存数据时往往不会将所有数据保存在一个表中,而是在多个表中存储,联结表就是从多个表中查询数据。

sqlite数据库_数据库_14

2.6视图(虚拟表)

作用:简化复杂的sql语句。

语法:create view 视图名 as 语句

drop view 视图名;

sqlite数据库_数据库_15

2.7触发器

SQLite 的触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行调用

语法:create trigger 触发器名 [before|after] [insert|update|delete] on 表名

begin 语句;

sqlite数据库_sqlite_16

sqlite数据库_数据库_17

sqlite数据库_数据库_18

2.8索引(查询优化)

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。空间换时间

sqlite数据库_sqlite_19

知识点3 :编程

1、打开数据库

sqlite数据库_SQLite_20

2、关闭数据库

sqlite数据库_SQLite_21

3、操作数据库

方式1:(回调方式)

sqlite数据库_SQLite_22

sqlite数据库_数据库_23

方式2:(非回调方式)

sqlite数据库_数据库_24

案例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;
}

sqlite数据库_数据库_25

案例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;
}

sqlite数据库_sqlite_26

上一篇:AI 如何理解文字:Embedding解析-用于Embedding的库


下一篇:Go 语言中变量的作用域详解-特殊语句的作用域