学习笔记——sqlite3 数据库基础

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. 重命名新表
相关推荐
lcreek15 小时前
Linux 信号机制详解:从硬件异常到安全编程实践
linux·系统编程
丝斯201115 小时前
AI学习笔记整理(54)——大模型之Agent 智能体开发前沿技术
人工智能·笔记·学习
南 阳15 小时前
Python从入门到精通day10
linux·windows·python
悟能不能悟15 小时前
在Oracle中,包分为包头(PACKAGE)和包体(PACKAGE BODY),存储过程的实现代码在包体中。以下是几种查找方法
数据库·oracle
xdpcxq102915 小时前
Apache 详解 在 Ubuntu 24 中安装和配置 Apache
linux·ubuntu·apache
晨非辰15 小时前
C++波澜壮阔40年|类和对象篇:拷贝构造与赋值重载的演进与实现
运维·开发语言·c++·人工智能·后端·python·深度学习
天上飞的粉红小猪15 小时前
Socket编程TCP
服务器·网络·tcp/ip
铉铉这波能秀15 小时前
如何在arcmap中将shp等文件类型导出为表格(四种方法)
数据库·arcgis·数据分析·arcmap·地理信息·shp
General_G15 小时前
irobot_benchmark的编译和使用
linux·中间件·机器人·ros2
hetao173383715 小时前
2026-01-16~19 hetao1733837 的刷题笔记
c++·笔记·算法