学习笔记——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. 重命名新表
相关推荐
呉師傅4 分钟前
【使用技巧】Adobe Photoshop 2024调整缩放与布局125%后出现点菜单项漂移问题的简单处理
运维·服务器·windows·adobe·电脑·photoshop
云姜.5 分钟前
线程和进程的关系
java·linux·jvm
heartbeat..7 分钟前
JVM 性能调优流程实战:从开发规范到生产应急排查
java·运维·jvm·性能优化·设计规范
浅念-10 分钟前
C++入门(2)
开发语言·c++·经验分享·笔记·学习
ZH154558913110 分钟前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
玄同76511 分钟前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码12 分钟前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql
chian-ocean14 分钟前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer
简佐义的博客27 分钟前
生信入门进阶指南:学习顶级实验室多组学整合方案,构建肾脏细胞空间分子图谱
人工智能·学习
近津薪荼28 分钟前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先