sqlite3 数据库
数据库基础概念
1. 数据库定义
数据库是数据的仓库,用于存储、管理和操作海量数据。
2. 数据库层级结构
数据库(Database) → 表(Table) → 记录(Record/Row) → 字段(Field/Column)
3. 主要分类
| 类型 | 代表产品 | 特点 |
|---|---|---|
| 大型数据库 | Oracle, DB2 | 企业级,功能全面,收费 |
| 中型数据库 | MySQL, SQL Server, PostgreSQL | 开源/商业,广泛应用 |
| 小型数据库 | SQLite, PowerDB | 轻量级,嵌入式 |
| 内存数据库 | Redis, Memcached | 高性能,内存存储 |
4. 核心名词解释
-
DB (Database): 数据库,数据存储的物理文件或逻辑集合
-
DBMS (Database Management System): 数据库管理系统,如MySQL, Oracle等
-
MIS (Management Information System): 管理信息系统
-
OA (Office Automation): 办公自动化系统
sqlite3 特点
核心优势

技术规格
-
开发语言: C语言
-
代码量: 约10,000行
-
文件大小: < 10MB
-
最大数据库: 2TB
-
官方网站 : www.sqlite.org
-
许可证: 公共领域 (Public Domain)安装与配置
Ubuntu/Debian 系统
# 安装命令行工具
sudo apt-get update
sudo apt-get install sqlite3
# 安装开发库(编程需要)
sudo apt-get install libsqlite3-dev
# 验证安装
sqlite3 --version
编译选项
# 基本编译
gcc program.c -o program -lsqlite3
# 带调试信息
gcc -g program.c -o program -lsqlite3
# 指定C标准
gcc -std=c99 program.c -o program -lsqlite3
# 显示所有警告
gcc -Wall -Wextra program.c -o program -lsqlite3
sqlite3 命令行操作
启动与退出
# 启动SQLite3(不打开数据库)
sqlite3
# 启动并打开数据库
sqlite3 mydatabase.db
# 退出SQLite3
.quit # 或 .q 或 .exit
数据库管理命令
| 命令 | 功能 | 示例 |
|---|---|---|
.help |
显示帮助信息 | .help |
.databases |
显示所有数据库 | .databases |
.tables |
显示所有表 | .tables |
.schema |
显示表结构 | .schema users |
.mode |
设置输出模式 | .mode column |
.headers |
显示/隐藏列名 | .headers on |
.output |
输出到文件 | .output result.txt |
.import |
导入数据 | .import data.csv users |
.dump |
导出数据库 | .dump > backup.sql |
常用示例
sql
-- 1. 查看当前数据库
.databases
-- 2. 查看所有表
.tables
-- 3. 查看表结构(建表语句)
.schema users
-- 或
.schema
-- 4. 美化输出
.headers on
.mode column
.width 10 20 10
-- 5. 导出数据
.output data.txt
SELECT * FROM users;
.output stdout
📝 SQL 语句详解
1. 创建表 (CREATE TABLE)
-- 基本语法
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...
);
-- 示例:创建用户表
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER CHECK(age > 0),
email TEXT UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 带索引创建
CREATE TABLE products (
id INTEGER PRIMARY KEY,
name TEXT,
price REAL,
category TEXT,
UNIQUE(name, category)
);
CREATE INDEX idx_price ON products(price);
2. 删除表 (DROP TABLE)
-- 删除表(慎用!)
DROP TABLE users;
-- 先检查是否存在(SQLite特有)
DROP TABLE IF EXISTS users;
3. 插入数据 (INSERT)
-- 方式1:指定所有列
INSERT INTO users VALUES (1, '张三', 25, 'zhangsan@email.com');
-- 方式2:指定部分列(推荐)
INSERT INTO users (name, age, email)
VALUES ('李四', 30, 'lisi@email.com');
-- 方式3:插入多行
INSERT INTO users (name, age) VALUES
('王五', 28),
('赵六', 35),
('孙七', 22);
4. 查询数据 (SELECT)
-- 查询所有列
SELECT * FROM users;
-- 查询指定列
SELECT name, age FROM users;
-- 条件查询
SELECT * FROM users WHERE age > 25;
-- 多条件
SELECT * FROM users
WHERE age > 20 AND age < 30;
-- 或条件
SELECT * FROM users
WHERE age < 20 OR age > 60;
-- IN 查询
SELECT * FROM users
WHERE age IN (20, 25, 30);
-- 模糊查询
SELECT * FROM users
WHERE name LIKE '张%';
-- 排序
SELECT * FROM users
ORDER BY age DESC;
-- 限制数量
SELECT * FROM users
LIMIT 10;
-- 分页查询
SELECT * FROM users
LIMIT 10 OFFSET 20; -- 跳过20条,取10条
-- 分组统计
SELECT age, COUNT(*) as count
FROM users
GROUP BY age
HAVING count > 1;
-- 联合查询
SELECT u.name, o.order_id
FROM users u
JOIN orders o ON u.id = o.user_id;
5. 更新数据 (UPDATE)
-- 更新所有行(慎用!)
UPDATE users SET age = age + 1;
-- 条件更新
UPDATE users
SET age = 30, email = 'new@email.com'
WHERE name = '张三';
-- 使用子查询更新
UPDATE users
SET age = (
SELECT AVG(age) FROM users
)
WHERE age IS NULL;
6. 删除数据 (DELETE)
-- 删除所有数据(慎用!)
DELETE FROM users;
-- 条件删除
DELETE FROM users
WHERE age < 18;
-- 删除重复数据(保留最小id)
DELETE FROM users
WHERE id NOT IN (
SELECT MIN(id)
FROM users
GROUP BY name, age
);
7. 修改表结构 (ALTER TABLE)
-- SQLite支持的ALTER操作有限
-- 重命名表
ALTER TABLE old_name RENAME TO new_name;
-- 添加列
ALTER TABLE users ADD COLUMN phone TEXT;
-- SQLite不支持删除列,需要:
-- 1. 创建新表
-- 2. 复制数据
-- 3. 删除旧表
-- 4. 重命名新表