SQLite 教程(千字长文)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 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 标识表示索引被有效利用。


案例实战:学生信息管理系统

系统需求

  1. 管理学生的基本信息(姓名、年龄、GPA)
  2. 支持按条件查询学生
  3. 处理报名课程的事务操作

完整代码实现(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 构建待办事项应用或数据分析系统,从而真正理解数据库设计的精髓。

最新发布