每天掌握一个Linux命令 - sqlite3

Linux 命令工具 sqlite3 使用指南

一、工具概述

sqlite3 是 SQLite 数据库的命令行工具,用于在 Linux 系统中直接操作 SQLite 数据库(轻量级、无服务器、嵌入式关系型数据库)。
核心特点

  • 无需安装数据库服务,直接通过命令行操作 .db 文件。
  • 支持 SQL92 标准,语法简洁,适合快速开发和小型项目。
  • 数据存储在单一文件中,方便移植和备份。

二、安装方式

1. 系统自带(多数 Linux 发行版)

直接在终端输入 sqlite3 命令,若提示版本信息则已安装:

bash 复制代码
sqlite3 --version  # 输出版本号(如 3.36.0)

2. 手动安装(以 Ubuntu/Debian 为例)

bash 复制代码
sudo apt update
sudo apt install sqlite3  # 安装命令行工具
sudo apt install libsqlite3-dev  # 安装开发库(可选,用于编译程序)

3. 源码编译(适用于自定义版本)

bash 复制代码
wget https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release  # 下载源码
tar -zxvf sqlite.tar.gz
cd sqlite
./configure
make && make install

三、核心功能

功能分类 说明
数据库操作 创建/打开数据库、删除表、备份数据库文件
数据操作 增删改查(CRUD)、事务管理、聚合函数计算
元数据查看 显示表结构、列出数据库中的表和索引、查看 SQL 语句执行计划
工具命令 导出数据为 CSV/JSON、执行外部 SQL 文件、设置输出格式(表格/列模式)

四、基础用法

1. 连接/创建数据库

bash 复制代码
sqlite3 demo.db  # 若文件不存在,创建新数据库;存在则直接打开

退出数据库

sql 复制代码
.exit  -- 或 .quit

2. 执行 SQL 语句

sqlite3 交互模式下直接输入 SQL 命令(需以 ; 结尾):

sql 复制代码
-- 创建表
CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER,
    email TEXT UNIQUE
);

-- 插入数据
INSERT INTO users (name, age, email) VALUES ('Alice', 25, 'alice@example.com');

-- 查询数据
SELECT * FROM users;

3. 常用元命令(以 . 开头,无需 ; 结尾)

元命令 作用
.tables 列出所有表
.schema [表名] 显示表结构或指定表的建表语句
.headers on 开启查询结果的列名显示
.mode column 设置结果格式为列模式(默认是列表)
.output data.csv 将查询结果输出到文件(需配合 .mode

五、进阶操作

1. 事务管理

sql 复制代码
BEGIN TRANSACTION;  -- 开始事务
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');
UPDATE users SET age = 30 WHERE name = 'Bob';
COMMIT;  -- 提交事务(或 ROLLBACK; 回滚)

2. 数据导出与导入

导出为 CSV 文件
sql 复制代码
.mode csv
.output users.csv
SELECT * FROM users;
从 SQL 文件导入数据
bash 复制代码
sqlite3 demo.db < data.sql  # 执行 data.sql 中的 SQL 语句

3. 执行计划分析

sql 复制代码
EXPLAIN QUERY PLAN SELECT * FROM users WHERE age > 25;  -- 查看查询优化策略

4. 数据库备份与恢复

bash 复制代码
# 备份数据库文件(直接复制 .db 文件)
cp demo.db demo_backup.db

# 恢复(覆盖原文件,需确保数据库未被占用)
cp demo_backup.db demo.db

六、实战案例:学生成绩管理系统

场景:管理学生、课程、成绩数据

1. 创建数据库和表结构
sql 复制代码
CREATE DATABASE school;  -- SQLite 无需显式创建数据库,直接操作文件即可
.open school.db  -- 打开数据库文件

CREATE TABLE students (
    sid INTEGER PRIMARY KEY,
    sname TEXT NOT NULL,
    age INTEGER,
    gender TEXT
);

CREATE TABLE courses (
    cid INTEGER PRIMARY KEY,
    cname TEXT NOT NULL,
    credit INTEGER
);

CREATE TABLE scores (
    sid INTEGER,
    cid INTEGER,
    score REAL,
    PRIMARY KEY (sid, cid),
    FOREIGN KEY (sid) REFERENCES students(sid),
    FOREIGN KEY (cid) REFERENCES courses(cid)
);
2. 插入测试数据
sql 复制代码
INSERT INTO students VALUES (1, 'Tom', 18, 'Male');
INSERT INTO courses VALUES (101, 'Math', 4);
INSERT INTO scores VALUES (1, 101, 85.5);
3. 查询平均成绩
sql 复制代码
.headers on
.mode column
SELECT s.sname, AVG(sc.score) AS avg_score
FROM students s
JOIN scores sc ON s.sid = sc.sid
GROUP BY s.sid;

七、注意事项

  1. 文件权限

    • 操作数据库文件时需注意读写权限,避免因权限不足导致操作失败(如 sqlite3 demo.db 时提示 Permission denied)。
  2. 事务安全

    • 高并发场景下需谨慎使用事务(SQLite 单文件模式在写入时会锁定数据库,适合低并发场景)。
  3. 数据类型

    • SQLite 采用 弱类型(列不强制约束数据类型),但建议遵循表定义的类型规范,避免逻辑错误。
  4. 文件大小

    • 单个 SQLite 文件最大支持约 140 TB(受限于文件系统),但实际应用中建议用于中小规模数据。
  5. 版本兼容

    • 低版本 SQLite 可能不支持部分 SQL 语法(如窗口函数),建议升级到最新版本(当前最新版本可通过 sqlite3 --version 查看)。

通过以上内容,可快速掌握 sqlite3 命令行工具的核心用法,适用于开发调试、小型数据管理等场景。如需处理大规模数据或高并发场景,建议结合应用层逻辑或迁移至 PostgreSQL、MySQL 等数据库。

相关推荐
秃秃秃秃哇几秒前
ubuntu18编译RealSense SDK 2.0
linux
神也佑我橙橙2 分钟前
Ubuntu 22.04 安装英伟达驱动
linux·ubuntu·nvidia
不喝水的鱼儿8 分钟前
Ubuntu 25.04安装搜狗输入法
linux·运维·ubuntu
不脱发的程序猿1 小时前
Linux守护进程
linux·嵌入式
星晨雪海1 小时前
MySQL安装报错解决
数据库·mysql
好奇的菜鸟7 小时前
Spring Boot 事务失效问题:同一个 Service 类中方法调用导致事务失效的原因及解决方案
数据库·spring boot·sql
岁岁岁平安8 小时前
Redis基础学习(五大值数据类型的常用操作命令)
数据库·redis·学习·redis list·redis hash·redis set·redis string
小光学长10 小时前
基于vue框架的防疫科普网站0838x(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
极限实验室10 小时前
使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建
数据库·docker·devops
飞翔的佩奇10 小时前
Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·数据库·mysql·毕业设计·ssm·旅游·jsp