欢迎光临
我们一直在努力

【SQLite数据库】—— 概念及基本操作

本文系统介绍了数据库基础知识与应用操作。主要内容包括:1)数据库分类与核心概念,重点解析了SQLite嵌入式数据库的特点;2)SQLite常用指令与基本操作,涵盖表创建、增删改查、排序等语法;3)数据库维护命令(导入导出)与可视化工具;4)C语言操作SQLite的编程接口,包括打开/关闭数据库和执行SQL语句的函数使用示例。全文以SQLite为例,详细说明了轻量级数据库的实际应用方法,适合开发者快速掌握数据库基础操作。


一、数据库

数据库是结构化的数据集合,由数据库管理系统统一存储、管理,数据以表、行、列的形式组织。

1.分类

分类代表数据库
大型数据库 ORACLE
中型数据库 MYSQL、MSSQL(SQL Server)
小型数据库 SQLITE、DBII、powdb

2.核心名词解释

缩写英文全称中文含义补充说明
DB Database 数据库 存储数据的仓库,是数据的集合
DBMS Database Management System 数据库管理系统 管理数据库的软件(如 MySQL、Oracle、SQLite)
MIS Management Information System 管理信息系统 利用数据库进行业务管理的系统(如企业 ERP、学生管理系统)
OA Office Automation 办公自动化 用于日常办公流程管理的系统(如审批、文档管理)
SQL Structured Query Language 结构化查询语言 操作关系型数据库的标准语言,核心操作:SELECT(查询)、UPDATE(更新)等

3.嵌入式数据库  SQLlite

1)核心特点:
  • 开源 & 开发语言:完全开源,使用 C 语言 开发,性能高效且可移植性强。
  • 轻量级:核心代码约 1 万行,总大小在 10MB 以内,非常小巧。
  • 无需安装:是绿色软件,解压即可使用,不依赖系统环境。
  • 文件型数据库:整个数据库就是一个独立文件,可直接复制、移动,部署极其方便。
  • 容量上限:单数据库文件最大可支持 2TB 的数据存储。
  • 2)与其他数据库对比:
    特性SQLiteMySQLOracle
    部署方式 单文件,无需服务 需要独立服务进程 企业级服务集群
    并发能力 适合低并发读写 高并发,支持多用户 极高并发,企业级
    主要场景 嵌入式、本地存储 中小型网站、Web 应用 大型企业核心系统
    学习难度 极低,上手快 中等 高,体系复杂

    二、数据库的指令

    指令格式功能说明
    .database 列出当前数据库及关联的系统文件
    .tables 列出当前数据库中的所有表
    .schema 表名 查看指定表的结构(建表语句)
    .headers on 开启查询结果的列名显示(让输出更易读)
    .exit / .quit / .q 退出 SQLite 控制台(三种写法效果相同)

    三、数据库的基本操作

    操作台用:“sqlite3 文件名.db”唤出;所有的sql语句必须以分号结尾;SQLite 不区分大小写

    1.创建一个表

    create table 表名(表字段1 类型, 表字段2 类型, …);

    eg: create teable user(id int,name char, age int);

    注:以上表的表字段,支持以下数据类型:

    数据类型说明适用场景示例写法
    INT 整数类型(自动适配大小) 年龄、ID、数量、序号 id INT
    REAL 双精度浮点数(小数) 身高、体重、温度、普通小数 height REAL
    DECIMAL 精确小数(可指定精度) 金额、价格、财务数据 price DECIMAL(10,2)
    NUMERIC 通用数字类型 不确定用什么类型时 score NUMERIC
    BOOLEAN 布尔值(存 1/0) 状态、开关、是否启用 is_vip BOOLEAN

    2.删除一个表

    drop table 表名;

    eg: drop table user;

    3.向表中增加数据

    insert into 表名(字段名称) values (值名称);

    eg:insert into user (age) values (12); //指定表字段增加数据

         intsert into use values (12,"wang",11);   //整体表字段增加数据,字符串用单引号或者双引号括起来

    4.查询一个表

    select 列名 from 表名 条件;

    eg:select * from user;  //查看所有表数据

         select id from user;  //查看id字段的数据

         select id,name from user where not age < 30;  //在where后加筛选条件,数字可以直接加条件

          //字符串有格式要求:where like '张三'  等效于 where = ’张三‘;

         //字符串还可以模糊查找:where like '张%';(通配符%,表示张后面可跟任意多字符;通配符_表示一个任意字符)。

    5.对表数据排序

    select * from 表名 by 表字段;  //默认升序排列,在表字段后加desc为降序排列

    eg:select * from user order by id;

         select * from user oder by id desc;

         select * from user limit 3;//将表id限制在3以下

    6.更新表数据

    update 表名 set 表字段 = 新数据  where 表字段 = 数据;

    eg:update user set id = 3 where age = 23;//将age=23的那一行的id列数据改为3

    7.删除表中数据

    delete from 表名 满足条件;

    eg:delete from user; //删除表中的所有数据

         delete from user where id = 1;  //删除表中id = 1的数据

         delete from user where id =1 and name = "zhang";  //删除表中id = 1 且 name = 'zhang'的数据

         delete from user where id = 1 or id = 2;  //删除 user 表中,id 等于 1 或者 id 等于 2 的所

    有数据

    8.插入时间列

    CREATE TABLE user1(id int, name char, age int, dt datetime);

    insert into user1 values (2, '张三', 23, datetime('now', '+8 hours'));

    •  datetime() 函数,datetime('now'):获取当前的 UTC 时间(世界协调时间),比北京时间晚 8 小时。
    • datetime('now', '+8 hours'):在 UTC 时间基础上增加 8 小时,得到北京时间,这是在国内开发时最常用的写法,8 和 hours之间必须要空格!

    9.自动增长列列

    CREATE TABLE user3(id INTEGER PRIMARY KEY ASC,name char,age int,dt datetime);
    insert into user3 values (NULL,'李四',23,datetime('now'));

    • PRIMARY  KEY 主键是表中能唯一标识一条记录的字段。主键的值不可重复,也不能为空,保证每条数据唯一可识别。主键用于精准定位数据,方便查询、修改、删除。主键查询比普通字段快很多,因为主键默认自带索引,像目录一样直接定位,比普通字段查询效率高很多。
    • 主键 id 设为 INTEGER PRIMARY KEY 时,插入写 NULL 就是让数据库自动生成自增编号,不用自己管。

    四、数据库的维护命令

    1.数据的导出:

    sqlite3 xxx.db .dump > xxx.sql

    //将数据库名称为xxx的数据库整体导出到脚本中,可以直接通过vim指令查看。导出的数据库不会实时同步数据库的修改,在数据库改动后要再次导出才能看得见改变

    2.数据的导入:

    sqlite3 xxx.db < xxx.sql

    注意:数据库的导出和输入是在系统终端命令使用的

    3.可视化工具安装:

    sudo apt-get install sqlitebrowser

    五、相关函数

    数据库编程步骤:打开数据库、读写数据库(增、删、改、查),关闭数据库

    1. 打开数据库:

    sqlite3_open (char * path,sqlite3 ** db);

    功能:打开指定 path 路径 + 文件名称的数据库,并将打开的地址指向 db 变量的句柄。

    参数:path 要打开的数据库路径 + 名称

               db 用于接收数据库句柄的二级指针

    返回值:成功 0;失败 非 0;

    2. 关闭数据库:

    sqlite3_close (sqlite3 * db);

    功能:关闭指定的数据库,释放资源。

    参数:db 已经打开的数据库句柄

    返回值:成功 0;失败 非 0;

    3. 执行 sql 语句:

    sqlite3_exec (sqlite3 *db,char *sql,callback fun,void * arg,char **errmsg);

    功能:在 db 数据库上执行 sql 语句,并将结果返回。

    参数:db 要执行 sql 的数据库句柄sql 要执行的 sql 语句

              fun 查询操作的回调函数,用于接收结果

              arg 传递给回调函数的参数,无回调则填 NULL

              errmsg 用于接收执行过程中的错误信息

    返回值:执行成功 0;失败 非 0;

    示例:

    #include <sqlite3.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main(int argc, char **argv)
    {
    //定义SQLite数据库句柄指针(相当于文件描述符),初始化为NULL
    sqlite3 *db = NULL;
    // 1.打开数据库,获得数据的句柄
    int ret = sqlite3_open("aaa.db", &db);
    //判断是否打开成功,SQLITE_OK等于0,sqlite3_open成功返回0
    if (SQLITE_OK != ret)
    {
    fprintf(stderr, "open db error %s\\n", sqlite3_errstr(ret));
    sqlite3_close(db);
    return 1;
    }

    //定义错误信息指针,用于接收sqlite3_exec执行失败的错误描述
    char *errmsg = NULL;
    //存储需要执行的指令
    char sql_cmd[512] = "insert into test values(7,'shuaige')";
    // 2.执行SQL语句,向指定表中插入一条数据
    ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);
    if (SQLITE_OK != ret)
    {
    fprintf(stderr, "sqlite3_exec sql_cmd:[%s], %s\\n", sql_cmd, errmsg);
    sqlite3_free(errmsg);
    sqlite3_close(db);
    return 1;
    }
    // 3.关闭数据,释放资源
    sqlite3_close(db);

    return 0;
    }

    赞(0)
    未经允许不得转载:171主机测评 » 【SQLite数据库】—— 概念及基本操作
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址