一、数据库分类及SQLite入门

目录

1、数据库分类整合详解

1.1、数据库整体分类

1.2、各类数据库详细整合

1、关系型数据库(RDBMS)

[1. MySQL](#1. MySQL)

[2. SQL Server](#2. SQL Server)

[3. Oracle](#3. Oracle)

[4. DB2](#4. DB2)

2、非关系型数据库(NoSQL)

[1. Redis](#1. Redis)

[2. MongoDB](#2. MongoDB)

3、轻量级数据库-SQLite

1.3、核心功能支持对比表

1.4、总结

2、SQLite

[2.1、SQLite 核心基础操作](#2.1、SQLite 核心基础操作)

[1. 第一步:创建/打开数据库](#1. 第一步:创建/打开数据库)

[2. 常用内置辅助命令](#2. 常用内置辅助命令)

[3. 核心 SQL 操作(CRUD)](#3. 核心 SQL 操作(CRUD))

[(1)创建表(CREATE TABLE)](#(1)创建表(CREATE TABLE))

[(2)插入数据(INSERT INTO)](#(2)插入数据(INSERT INTO))

(3)查询数据(SELECT)

(4)更新数据(UPDATE)

(5)删除数据(DELETE)

[(6)删除表(DROP TABLE)](#(6)删除表(DROP TABLE))

[2.2、SQLite 进阶功能](#2.2、SQLite 进阶功能)

[1. 索引(提高查询效率)](#1. 索引(提高查询效率))

[2. 事务(保证数据一致性)](#2. 事务(保证数据一致性))

[3. 外键约束(关联多张表)](#3. 外键约束(关联多张表))

2.3、总结


1、数据库分类整合详解

1.1、数据库整体分类

数据库本质是数据存储与管理的工具 ,核心分为三大类 ,核心区别在于 数据存储结构、关联方式和适用场景

| 分类 | 数据结构(核心特点) | 代表产品 | 适用场景 |
| 关系型数据库(RDBMS) | 以二维表(行+列)存储,数据间有强关联(外键) | MySQL、SQL Server、Oracle、DB2 | 数据结构固定、需事务保障、强一致性需求(如电商、金融、管理系统) |
| 非关系型数据库(NoSQL) | 无固定表结构,以
键值对、文档、列族、图
存储 | Redis、MongoDB | 数据结构灵活、高并发读写、海量数据存储(如缓存、社交、日志) |

轻量级数据库 单文件/嵌入式,无需独立服务,资源占用极低 SQLite 本地存储、小型应用、嵌入式设备(如APP配置、工具类软件、原型开发)

1.2、各类数据库详细整合

1、关系型数据库(RDBMS)

核心优势:数据结构化、支持事务(ACID)、强关联(外键)、SQL 标准化查询

1. MySQL
  • 核心定位:开源免费的主流关系型数据库(原属 Sun 公司,后被甲骨文收购,仍保持开源)
  • 关键特性
    • 免费开源(商业使用也免费,仅需遵守 GPL 协议);
    • 跨平台兼容(Windows/Mac/Linux 均支持);
    • 性能稳定,支持百万级数据存储,中小规模场景性价比极高;
    • 社区活跃,生态完善(大量运维工具、框架集成,如 Java/Python 主流框架均原生支持)。
  • 功能支持(你关注的核心功能):
    • 基础操作:增删改查(SELECT/INSERT/UPDATE/DELETE)、条件语句(WHERE)、分组(GROUP BY)、排序(ORDER BY)完全支持;
    • 高级功能:事务(ACID 完整支持)、视图(VIEW)、存储过程、触发器(TRIGGER)、T-SQL 编程(兼容标准 SQL,扩展语法适配自身);
    • 其他:支持外键、索引优化、主从复制(集群部署)。
  • 适用场景
    • 互联网中小规模应用(如电商网站、博客、管理系统);
    • 创业公司、个人项目(成本低、易部署);
    • 数据量:从几千条到千万级均可支撑(百万级最优)。
2. SQL Server
  • 核心定位:微软推出的商业关系型数据库(使用免费(开发/测试),生产环境收费)
  • 关键特性
    • 与 Windows 系统、.NET 框架深度集成(微软生态首选);
    • 图形化管理工具(SSMS)易用性强,运维成本低;
    • 数据安全和灾备能力突出(适合企业级场景)。
  • 功能支持
    • 基础操作:完全支持增删改查、条件/分组/排序;
    • 高级功能:事务、视图、存储过程、触发器、T-SQL 编程(微软主导的 SQL 扩展,功能强大);
    • 其他:支持分区表、数据仓库、BI(商业智能)集成。
  • 适用场景
    • 微软生态项目(.NET 开发的企业系统、办公系统);
    • 国内中小企业(如政府、国企、传统行业的内部管理系统);
    • 数据量:中小到大型(千万级~亿级)。
3. Oracle
  • 核心定位:甲骨文旗下的企业级商业数据库(个人/开发使用免费,生产环境按服务器/用户收费,价格昂贵)
  • 关键特性
    • 性能极强(支持亿级以上数据存储,并发处理能力顶尖);
    • 稳定性和安全性业界标杆(金融级场景首选);
    • 功能全面(几乎覆盖所有关系型数据库高级特性)。
  • 功能支持
    • 基础操作:完全支持(优化器强大,复杂查询效率高);
    • 高级功能:事务(支持分布式事务)、视图、存储过程(PL/SQL 编程,功能比 T-SQL 更丰富)、触发器、自定义函数;
    • 其他:支持集群(RAC)、数据加密、容灾备份、多租户。
  • 适用场景
    • 大型企业、金融行业(银行、证券、保险);
    • 核心业务系统(如交易系统、客户管理系统);
    • 数据量:亿级以上,高并发、高可用需求场景。
4. DB2
  • 核心定位:IBM 推出的企业级关系型数据库(商业收费,主打大型机/企业级场景)
  • 关键特性
    • 与 IBM 大型机、服务器生态深度适配;
    • 数据处理能力强,适合海量结构化数据存储;
  • 适用场景:大型金融、电信行业(如银行核心系统、电信计费系统),国内使用场景较少(主要被 Oracle 替代)。

2、非关系型数据库(NoSQL)

核心优势:无固定表结构、高并发读写、横向扩展容易、资源占用低,不依赖 SQL (部分支持类 SQL 语法)。

1. Redis
  • 核心定位 :基于**键值对(key-value)**的内存数据库(非持久化默认,支持持久化)
  • 关键特性
    • 数据全存于内存,读写速度极快(10万+ QPS);
    • 支持多种数据结构(字符串、哈希、列表、集合、有序集合);
    • 支持过期时间、发布订阅、缓存淘汰策略。
  • 功能支持(对应关系型核心功能):
    • 基础操作:增删改查(通过原生命令,如 SET/GET/DEL,无 WHERE/GROUP BY 语法);
    • 高级功能:不支持事务(仅支持简单的事务语义,非 ACID 完整支持)、无视图/存储过程/触发器;
    • 核心优势:缓存、计数器、分布式锁、消息队列(临时存储)。
  • 适用场景
    • 缓存(减轻数据库压力,如商品详情缓存);
    • 高频读写场景(如秒杀倒计时、点赞数统计);
    • 临时数据存储(如会话登录状态)。
2. MongoDB
  • 核心定位 :基于**文档(JSON 格式)**的非关系型数据库(最接近关系型的 NoSQL)
  • 关键特性
    • 数据结构灵活(无需提前定义表结构,字段可动态增减);
    • 支持类 SQL 查询(如条件查询、排序、分组,语法类似 SQL 但非标准);
    • 适合存储非结构化/半结构化数据(如用户画像、文章内容)。
  • 功能支持
    • 基础操作:增删改查(insert/find/update/remove)、条件查询( gt 等运算符)、分组(aggregate)、排序(sort);
    • 高级功能:支持单文档事务(多文档事务需特定版本),无视图/存储过程(可通过聚合管道实现类似功能);
    • 核心优势:数据结构灵活,无需改表结构即可适配业务变化。
  • 适用场景
    • 社交平台(用户动态、评论,字段不固定);
    • 内容管理系统(文章、视频 metadata);
    • 物联网设备数据(传感器数据,字段可能动态变化)。

3、轻量级数据库-SQLite

  • 核心定位:单文件嵌入式数据库(无独立服务,C 语言开发,Python3 原生支持)
  • 关键特性
    • 资源占用极低(安装包 < 600KB,运行时内存占用 MB 级);
    • 数据库 = 1 个**.db 文件**(便携,复制文件即可迁移);
    • 支持标准 SQL 语法,无需额外配置(开箱即用)。
  • 功能支持
    • 基础操作:完全支持增删改查、条件/分组/排序;
    • 高级功能:支持事务(ACID)、视图、触发器、有限的存储过程(需通过扩展实现);
    • 限制:不支持高并发写入(文件级锁)、不适合超大数据量(建议 < 10GB)。
  • 适用场景
    • 本地应用存储(如 PC 工具软件、手机 APP 配置);
    • 小型项目/原型开发(快速迭代,无需部署数据库服务);
    • 嵌入式设备(如路由器、智能硬件,资源有限场景)。

1.3、核心功能支持对比表

| 功能 | 关系型数据库(MySQL/SQL Server/Oracle) | 非关系型数据库(Redis/MongoDB) | 轻量级(SQLite) |
| 增删改查(CRUD) | 完全支持(SQL 标准化) | 支持(原生命令/类 SQL) | 完全支持(SQL 标准化) |
| 条件语句(WHERE) | 完全支持 | MongoDB 支持,Redis 不支持 | 完全支持 |
| 分组(GROUP BY) | 完全支持 | MongoDB 支持(聚合管道),Redis 不支持 | 完全支持 |
| 排序(ORDER BY) | 完全支持 | 均支持(MongoDB sort/Redis sort) | 完全支持 |
| 事务(ACID) | 完全支持 | Redis 部分支持,MongoDB 单文档支持 | 完全支持 |
| 视图(VIEW) | 完全支持 | 不支持 | 完全支持 |
| 存储过程 | 完全支持 | 不支持 | 有限支持(需扩展) |
| 触发器(TRIGGER) | 完全支持 | 不支持 | 完全支持 |

T-Sql 编程 SQL Server 原生支持,MySQL/Oracle 兼容扩展 不支持 不支持

1.4、总结

  1. 关系型数据库 :适合结构化数据、强一致性、事务需求,是企业级应用的首选(如电商、金融),MySQL 性价比最高,Oracle 适合大型核心系统;
  2. 非关系型数据库 :适合非结构化/半结构化数据、高并发、灵活字段,Redis 主打缓存,MongoDB 主打文档存储;
  3. 轻量级数据库 :SQLite 适合本地存储、小型应用、嵌入式场景,无需部署服务,Python 原生支持,上手成本极低;
  4. 功能优先级:若需要事务、外键、复杂查询 ,选关系型 ;若需要灵活结构、高并发 ,选NoSQL ;若需要轻量化、本地存储 ,选 SQLite

2、SQLite

SQLite 是一款轻量级文件型数据库 ,无需单独安装服务器、无需配置服务,一个数据库就是一个文件(后缀 .db),跨平台(Windows/Mac/Linux/ 移动端通用),支持标准 SQL 语法,适合嵌入式开发、小项目存储、原型验证等场景。

已经安装了python ,会自带sqlite3(SQLite的Python库)无需额外下载

2.1、SQLite 核心基础操作

SQLite 命令分两类:

  • SQL 命令 :操作数据库(建表、增删改查),必须以 ; 结尾(分号是 SQL 语句结束标志);
  • sqlite3 内置命令 :操作 SQLite 工具本身(如查看表、退出),以 . 开头,无需分号。

1. 第一步:创建/打开数据库

SQLite 没有创建数据库 的单独命令,直接通过文件名打开数据库,若文件不存在则自动创建

示例:创建名为 student.db 的数据库(文件会保存在当前终端的工作目录下)

bash 复制代码
# 终端输入:打开/创建 student.db 数据库
sqlite3 student.db

执行后会进入 SQLite 交互环境(提示符变为 sqlite>),此时可输入 SQL 命令操作数据库。

2. 常用内置辅助命令

在 SQLite 交互环境中输入:

|-------------------|-----------------|
| 命令 | 功能描述 |
| .help | 查看所有内置命令帮助 |
| .tables | 查看当前数据库的所有表 |
| .schema 表名 | 查看指定表的创建语句(结构) |
| .exit.quit | 退出 SQLite 环境 |
| .mode column | 以表格形式显示查询结果(美观) |
| .header on | 显示查询结果的列名(配合上条) |

3. 核心 SQL 操作(CRUD)

CRUD:增删改查

学生表( students**)** 为例,字段:id(学号,主键)、name(姓名)、age(年龄)、score(成绩)。

(1)创建表(CREATE TABLE)

语法:

sql 复制代码
CREATE TABLE IF NOT EXISTS 表名 (
  字段1 数据类型 约束,
  字段2 数据类型 约束,
  ...
);
  • IF NOT EXISTS:避免重复创建表报错;
  • SQLite 常用数据类型:
    • INTEGER:整数(可存主键自增);
    • TEXT:字符串(文本、日期等);
    • REAL:浮点数(小数);
    • BLOB:二进制数据(图片、文件等);
  • 常用约束:
    • PRIMARY KEY:主键(唯一标识,不可重复);
    • AUTOINCREMENT:自增(仅 INTEGER 类型可用);
    • NOT NULL:非空(字段必须有值);
    • UNIQUE:唯一(字段值不可重复)。

**示例:**创建学生表

sql 复制代码
CREATE TABLE IF NOT EXISTS students (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  age INTEGER,
  score REAL
);

执行后用 .tables 验证:会显示 students 表。

(2)插入数据(INSERT INTO)

语法1:指定字段插入(推荐,顺序可自定义)

sql 复制代码
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);

语法2:插入所有字段(需按表结构顺序,不推荐)

sql 复制代码
INSERT INTO 表名 VALUES (值1, 值2, ...);

示例:插入3条学生数据(id 自增,可省略)

sql 复制代码
-- 插入学生1:姓名张三,年龄18,成绩95.5
INSERT INTO students (name, age, score) VALUES ('张三', 18, 95.5);
-- 插入学生2:姓名李四,年龄19,成绩88.0
INSERT INTO students (name, age, score) VALUES ('李四', 19, 88.0);
-- 插入学生3:姓名王五,年龄17(成绩为空)
INSERT INTO students (name, age) VALUES ('王五', 17);
  • 字符串值用单引号 ' ' 包裹;
  • 空值可省略字段,或用 NULL 表示(如 score NULL)。
(3)查询数据(SELECT)

语法(核心,最常用):

sql 复制代码
SELECT 字段1, 字段2... FROM 表名 WHERE 条件 GROUP BY 字段 HAVING 条件 ORDER BY 字段 ASC/DESC LIMIT 数量;

常用示例:

sql 复制代码
-- 1. 查询所有学生的所有字段(* 表示所有字段)
SELECT * FROM students;

-- 2. 查询所有学生的姓名和成绩(只显示指定字段)
SELECT name, score FROM students;

-- 3. 查询成绩 ≥90 分的学生(WHERE 条件过滤)
SELECT name, score FROM students WHERE score >= 90;

-- 4. 查询年龄 18-20 岁的学生(范围查询)
SELECT name, age FROM students WHERE age BETWEEN 18 AND 20;

-- 5. 查询姓名包含「张」的学生(模糊查询,% 匹配任意字符)
SELECT * FROM students WHERE name LIKE '%张%';

-- 6. 按成绩降序排列(DESC 降序,ASC 升序,默认 ASC)
SELECT name, score FROM students ORDER BY score DESC;

-- 7. 只查询前2条数据(LIMIT 限制数量)
SELECT * FROM students LIMIT 2;

执行后会以表格形式显示结果(因之前启用了 .mode column.header on)。

(4)更新数据(UPDATE)

语法:

sql 复制代码
UPDATE 表名 SET 字段1=值1, 字段2=值2... WHERE 条件;

必须加 WHERE****条件!否则会更新表中所有数据

示例:

sql 复制代码
-- 将王五的成绩改为92.0(按id更新,最安全,id唯一)
UPDATE students SET score = 92.0 WHERE id = 3;

-- 将张三的年龄改为19,成绩改为96.0
UPDATE students SET age = 19, score = 96.0 WHERE name = '张三';
(5)删除数据(DELETE)

语法:

sql 复制代码
DELETE FROM 表名 WHERE 条件;

必须加 WHERE****条件!否则会删除表中所有数据!

示例:

sql 复制代码
-- 删除id=2的学生(李四)
DELETE FROM students WHERE id = 2;

-- 删除成绩 < 90 分的学生(若有)
DELETE FROM students WHERE score < 90;
(6)删除表(DROP TABLE)

语法:

sql 复制代码
DROP TABLE IF EXISTS 表名;

**示例:**删除学生表

sql 复制代码
DROP TABLE IF EXISTS students;

2.2、SQLite 进阶功能

1. 索引(提高查询效率)

当表中数据量大时,查询会变慢,可给常用查询字段创建索引(类似书籍目录)。

语法:

sql 复制代码
-- 创建索引
CREATE INDEX IF NOT EXISTS 索引名 ON 表名 (字段);

-- 删除索引
DROP INDEX IF EXISTS 索引名;

示例: 给学生表的 name 字段创建索引

sql 复制代码
CREATE INDEX IF NOT EXISTS idx_students_name ON students (name);
  • 索引会加快 **WHERE name = 'xxx'**这类查询,但会减慢插入/更新/删除速度(需维护索引),按需使用。

2. 事务(保证数据一致性)

事务用于批量执行多个 SQL 操作,要么全部成功,要么全部失败(避免部分执行导致数据错乱)。

核心语法:

sql 复制代码
BEGIN;       -- 开始事务
SQL操作1;     -- 如插入、更新、删除
SQL操作2;
COMMIT;      -- 提交事务(所有操作生效)
-- 若中间出错,执行:ROLLBACK;  -- 回滚事务(所有操作撤销)

**示例:**转账场景(A 减 100,B 加 100,必须同时成功)

sql 复制代码
-- 先创建账户表
CREATE TABLE IF NOT EXISTS account (
  id INTEGER PRIMARY KEY,
  user TEXT NOT NULL,
  money REAL NOT NULL
);

-- 插入测试数据
INSERT INTO account VALUES (1, 'A', 1000), (2, 'B', 500);

-- 事务执行转账
BEGIN;
UPDATE account SET money = money - 100 WHERE user = 'A';
UPDATE account SET money = money + 100 WHERE user = 'B';
COMMIT;  -- 无错误则提交,此时 A=900,B=600

-- 若执行中出错(如字段写错),执行 ROLLBACK; 撤销所有操作

3. 外键约束(关联多张表)

SQLite 默认关闭外键约束,需手动启用,用于保证两张表的关联数据一致性(如订单表 关联用户表,用户删除后订单也删除)。

步骤:

sql 复制代码
-- 1. 启用外键约束(每次打开数据库都要执行)
PRAGMA foreign_keys = ON;

-- 2. 创建主表(用户表)
CREATE TABLE IF NOT EXISTS users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL
);

-- 3. 创建从表(订单表),外键关联用户表id
CREATE TABLE IF NOT EXISTS orders (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  order_no TEXT NOT NULL,
  user_id INTEGER,
  -- 外键约束:user_id 关联 users.id,用户删除时订单也删除(ON DELETE CASCADE)
  FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

-- 4. 测试:插入用户和订单
INSERT INTO users (name) VALUES ('张三');
INSERT INTO orders (order_no, user_id) VALUES ('20240501001', 1);

-- 5. 删除用户(订单会自动删除,因 ON DELETE CASCADE)
DELETE FROM users WHERE id = 1;

2.3、总结

SQLite 核心优势是轻量、无需配置、跨平台,学会以上基础操作(建表、增删改查、事务、索引)即可满足大部分小项目需求。

相关推荐
克喵的水银蛇1 小时前
Flutter 本地存储实战:SharedPreferences+Hive+SQLite
hive·flutter·sqlite
5***E6857 小时前
【SQL】写SQL查询时,常用到的日期函数
数据库·sql
遇见火星7 小时前
CentOS7 通过源码安装 Redis
数据库·redis·缓存
Mr.朱鹏7 小时前
RocketMQ安装与部署指南
java·数据库·spring·oracle·maven·rocketmq·seata
Coder-coco8 小时前
个人健康管理|基于springboot+vue+个人健康管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·mysql·论文
K哥11258 小时前
【9天Redis系列】基础+全局命令
数据库·redis·缓存
s***46988 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
f***R88 小时前
redis分页查询
数据库·redis·缓存
g***72708 小时前
【mysql】导出导入mysql表结构或者数据
数据库·mysql