1. SQLite3数据库入门与基础操作
SQLite作为一款轻量级的关系型数据库管理系统,以其零配置、无服务器、单文件存储的特性,成为嵌入式系统和本地应用开发的首选。我在实际项目中使用SQLite已有七年时间,从移动应用到桌面软件,它的稳定性和便捷性从未让我失望。
1.1 环境准备与基本命令
安装SQLite3只需一行命令(以Ubuntu为例):
bash复制sudo apt-get install sqlite3
验证安装成功后,我们首先熟悉几个核心命令:
bash复制sqlite3 --version # 查看版本
sqlite3 test.db # 创建或打开数据库
注意:SQLite的命令分为两种类型 - 以点(.)开头的元命令和标准SQL语句。元命令是SQLite特有的管理命令,而SQL语句则是通用的数据库操作语言。
常用元命令速查:
.databases:显示当前连接的数据库文件.tables:列出所有表.schema [表名]:查看表结构.mode column:设置列式显示.headers on:显示列名.quit:退出交互界面
1.2 数据库创建与管理实战
创建一个学生管理数据库的完整流程:
sql复制-- 创建数据库(如果文件不存在)
sqlite3 stu.db
-- 查看当前连接的数据库
.databases
-- 创建学生表
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER CHECK(age > 0),
class TEXT DEFAULT 'A班'
);
-- 查看表结构
.schema students
避坑指南:SQLite默认不强制外键约束,需要手动开启:
sql复制PRAGMA foreign_keys = ON;
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据操作全解析
2.1 CRUD基础操作
插入数据的三种标准写法:
sql复制-- 完整字段插入
INSERT INTO students VALUES (NULL, '张三', 18, 'B班');
-- 指定字段插入
INSERT INTO students (name, age) VALUES ('李四', 17);
-- 批量插入
INSERT INTO students (name, age, class)
VALUES ('王五', 16, 'A班'),
('赵六', 18, 'C班');
查询数据的进阶技巧:
sql复制-- 基础查询
SELECT * FROM students;
-- 带条件的查询
SELECT name, class FROM students WHERE age > 17;
-- 排序查询
SELECT * FROM students ORDER BY age DESC; -- 降序
SELECT * FROM students ORDER BY class, age; -- 多列排序
-- 分页查询
SELECT * FROM students LIMIT 2 OFFSET 1; -- 跳过1条取2条
更新与删除的安全操作:
sql复制-- 条件更新
UPDATE students SET class = 'A班' WHERE name = '李四';
-- 条件删除
DELETE FROM students WHERE id = 3;
重要提示:生产环境中务必先SELECT确认要操作的数据,再执行UPDATE/DELETE。建议开启事务保证操作原子性。
2.2 表结构修改实战
添加新列的正确姿势:
sql复制ALTER TABLE students ADD COLUMN gender TEXT;
-- 添加带默认值的列
ALTER TABLE students ADD COLUMN address TEXT DEFAULT '未填写';
注意:SQLite不支持直接删除或修改列,需要以下特殊处理:
- 创建新表
- 迁移数据
- 删除旧表
- 重命名新表
完整示例:
sql复制-- 1. 启用外键约束(如有)
PRAGMA foreign_keys=OFF;
-- 2. 开始事务
BEGIN TRANSACTION;
-- 3. 创建新表
CREATE TABLE students_new (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
class TEXT DEFAULT 'A班',
address TEXT
);
-- 4. 迁移数据
INSERT INTO students_new (id, name, age, class, address)
SELECT id, name, age, class, address FROM students;
-- 5. 删除旧表
DROP TABLE students
