SQLite 教程(千字长文)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
前言:为什么选择 SQLite 教程?
在编程领域,数据库是构建应用的核心组件之一。对于刚入门的开发者而言,选择一个简单易学且功能实用的数据库系统至关重要。SQLite 凭借其轻量级、无需配置、跨平台兼容等特性,成为许多开发者的首选入门数据库工具。它不仅适合小型项目,还能在嵌入式系统、移动应用开发中大显身手。本文将通过循序渐进的方式,从基础概念到实战案例,全面解析 SQLite 的核心知识点,帮助读者快速掌握这一工具。
安装与配置:零门槛的数据库环境搭建
SQLite 的安装过程极其简单,甚至无需复杂的配置步骤。对于 Windows、macOS 或 Linux 用户,只需通过以下方式即可快速启动:
1. 直接下载二进制文件
访问 SQLite 官方网站(https://www.sqlite.org/download.html),下载对应操作系统的预编译包。解压后即可在命令行中运行 sqlite3
命令启动交互式终端。
2. 通过编程语言集成
大多数编程语言(如 Python、JavaScript、Java)都提供了 SQLite 的驱动库。例如,在 Python 中只需安装 sqlite3
模块即可直接操作数据库:
import sqlite3
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()
3. 环境验证
在命令行中输入 sqlite3 --version
,若显示版本信息则表示安装成功。此时,您已准备好开始 SQLite 的探索之旅。
创建数据库与表:构建数据的“数字仓库”
数据库可以类比为一座图书馆,而表(Table)则是图书馆中的书架。每个表由若干字段(Column)和记录(Row)组成,共同存储特定类型的数据。
数据类型选择指南
SQLite 支持多种数据类型,但其设计原则是“类型灵活”。以下是常见类型及其用途:
数据类型 | 用途说明 | 示例值 |
---|---|---|
INTEGER | 存储整数 | 100, -5 |
TEXT | 存储字符串 | "Hello World" |
REAL | 存储浮点数 | 3.1415 |
BLOB | 存储二进制数据(如图片) | 图片的二进制流 |
示例:创建学生信息表
CREATE TABLE students (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER,
gpa REAL,
bio BLOB
);
主键与约束详解
- 主键(PRIMARY KEY):唯一标识每条记录,如同图书馆书架的编号。
- 非空约束(NOT NULL):确保字段必须有值,避免数据遗漏。
- 默认值(DEFAULT):为字段指定默认值,例如
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
。
数据操作:CRUD 的核心实践
SQLite 的强大之处在于其 SQL 语言的简洁性。以下是 CRUD 操作的完整示例:
插入数据(Create)
INSERT INTO students (name, age, gpa)
VALUES ('Alice', 20, 3.8);
查询数据(Read)
SELECT * FROM students WHERE age > 18 ORDER BY gpa DESC;
更新数据(Update)
UPDATE students
SET gpa = 3.9
WHERE name = 'Alice';
删除数据(Delete)
DELETE FROM students
WHERE age < 18;
比喻:数据操作如同图书馆管理
- INSERT:添加新书到书架
- SELECT:查找并借阅书籍
- UPDATE:修改书籍的标签信息
- DELETE:将过期书籍移除
事务管理:保证数据操作的“原子性”
事务(Transaction)是数据库操作的“不可分割单位”,确保多个 SQL 语句要么全部执行成功,要么全部回滚。例如,银行转账需保证“扣除甲账户金额”和“增加乙账户金额”同时完成。
示例:学生报名课程事务
BEGIN TRANSACTION;
INSERT INTO students (name, course) VALUES ('Bob', 'Math');
INSERT INTO courses (student_id, status) VALUES (LAST_INSERT_ROWID(), 'enrolled');
COMMIT;
若中间步骤出错,可通过 ROLLBACK
撤销所有操作。
索引优化:为查询装上“加速引擎”
索引(Index)如同图书馆的目录卡片,能显著提升查询速度。但需注意:索引会占用额外存储空间,并可能减慢写入操作。
创建索引示例
CREATE INDEX idx_student_name ON students(name);
使用 EXPLAIN 分析查询计划
EXPLAIN QUERY PLAN SELECT * FROM students WHERE name = 'Alice';
输出结果中的 SEARCH
标识表示索引被有效利用。
案例实战:学生信息管理系统
系统需求
- 管理学生的基本信息(姓名、年龄、GPA)
- 支持按条件查询学生
- 处理报名课程的事务操作
完整代码实现(Python 版本)
import sqlite3
conn = sqlite3.connect('school.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER,
gpa REAL
);
''')
cursor.execute("INSERT INTO students (name, age, gpa) VALUES (?, ?, ?)",
('Charlie', 22, 3.7))
conn.commit()
cursor.execute("SELECT * FROM students WHERE age > 20")
print(cursor.fetchall())
try:
conn.execute("BEGIN TRANSACTION")
new_student_id = conn.execute("INSERT INTO students ...").lastrowid
conn.execute("INSERT INTO courses ...", (new_student_id,))
conn.commit()
except:
conn.rollback()
print("报名失败")
conn.close()
结论:SQLite 的无限可能
通过本文的系统学习,您已掌握了从安装配置到高级操作的完整技能树。SQLite 的轻量级特性使其成为原型开发、本地存储管理的首选工具。无论是构建个人项目,还是为后续学习关系型数据库打下基础,SQLite 都是一个值得深入探索的起点。建议读者通过实际项目持续练习,例如尝试用 SQLite 构建待办事项应用或数据分析系统,从而真正理解数据库设计的精髓。