学习笔记——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. 重命名新表
相关推荐
SPC的存折12 分钟前
MySQL 8组复制完全指南
linux·运维·服务器·数据库·mysql
运维行者_13 分钟前
OpManager MSP NetFlow Analyzer集成解决方案,应对多客户端网络流量监控挑战
大数据·运维·服务器·网络·数据库·自动化·运维开发
sszdzq30 分钟前
docker 安装 doris
运维·docker·容器
dashizhi20151 小时前
共享文件禁止拖动本地磁盘、共享文件禁止另存为、禁止打印共享文件、禁止复制共享文件的方法
运维·服务器·网络·安全·电脑
网教盟人才服务平台2 小时前
AI 全面重塑网络攻防生态,智能安全进入深度对抗时代
网络·人工智能·安全
炸炸鱼.2 小时前
Python 操作 MySQL 数据库
android·数据库·python·adb
softshow10262 小时前
Etsy 把 1000 个 MySQL 分片迁进 Vitess
数据库·mysql
炽烈小老头2 小时前
【 每天学习一点算法 2026/04/12】x 的平方根
学习·算法
Linux技术芯2 小时前
Refault Distance算法详解
linux
0vvv02 小时前
linux-软件安装
linux