SQLite的数据格式和使用命令

SQLite 作为轻量级量嵌入式数据库,其数据格式(存储格式和数据类型)和使用命令(包括 SQL 命令和命令行工具命令)有鲜明特点。以下详细说明:

一、SQLite 数据格式

1. 数据库文件格式

SQLite 数据库以单一文件 形式存储(如 test.db),包含所有表、索引、数据等信息。文件格式是跨平台的(Windows/Linux/macOS 通用),且采用页式存储(默认页大小 4KB,可配置),确保高效读写。

2. 数据类型(动态类型系统)

SQLite 不严格遵循静态类型(与 MySQL 等不同),采用动态类型:列的类型仅为 "建议",实际可存储任意类型数据。但通常按以下类型设计表结构:

常用类型 说明 示例存储值
INTEGER 整数类型(可存 signed 整数,支持自增主键) 123-45
REAL 浮点数(8 字节双精度) 3.14-0.001
TEXT 文本字符串(UTF-8/UTF-16/UTF-32 编码) 'hello''中文'
BLOB 二进制数据(如图片、文件,原样存储) 图片二进制流
NUMERIC 数值类型(自动转换为合适的整数 / 浮点数 / 文本,适合日期、布尔值等) '2023-10-01'TRUE

特殊规则

  • 布尔值:TRUE 存为 1FALSE 存为 0(整数类型)。

  • 日期时间:无专用类型,常用 TEXT(如 '2023-10-01 12:30:00')或 INTEGER(时间戳,如 1696139400)存储。

  • 动态类型判定:插入数据时,SQLite 会根据值自动确定其 "存储类型"(而非列定义类型)。

二、SQLite 核心使用命令

(一)SQL 命令(数据操作与定义)

适用于所有 SQLite 客户端(命令行、编程语言接口等),与标准 SQL 兼容,部分有扩展。

  1. 数据库连接相关 无单独 SQL 命令,通过客户端工具连接文件(如 sqlite3 test.db)。

  2. 表操作(DDL)

    • 创建表:CREATE TABLE(见前文示例,支持约束如 PRIMARY KEYFOREIGN KEY 等)。

    • 删除表:DROP TABLE [IF EXISTS] 表名;

    • 修改表:ALTER TABLE 表名 RENAME TO 新表名;(重命名);ALTER TABLE 表名 ADD COLUMN 列定义;(添加列)。

  3. 数据操作(DML)

    • 插入:INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);

    • 查询:SELECT 列 FROM 表名 WHERE 条件 LIMIT 数量;(支持 JOINGROUP BYORDER BY 等)。

    • 更新:UPDATE 表名 SET 列=值 WHERE 条件;

    • 删除:DELETE FROM 表名 WHERE 条件;

  4. 索引操作

    • 创建索引:CREATE [UNIQUE] INDEX 索引名 ON 表名(列1, 列2);

    • 删除索引:DROP INDEX [IF EXISTS] 索引名;

  5. 事务操作

    • 开始事务:BEGIN TRANSACTION;

    • 提交:COMMIT;(确认修改)

    • 回滚:ROLLBACK;(取消修改)

  6. **特殊命令(PRAGMA)**SQLite 扩展命令,用于查询 / 修改数据库配置:

    • 开启外键支持:PRAGMA foreign_keys = ON;(默认关闭)

    • 查看表结构:PRAGMA table_info(表名);

    • 查看数据库页大小:PRAGMA page_size;

(二)SQLite 命令行工具命令(.xxx 格式)

通过 sqlite3 命令行工具操作时,可用以下辅助命令(非 SQL 语法,以 . 开头):

命令 说明 示例
.open 文件名 打开或创建数据库文件 .open test.db
.databases 查看当前连接的数据库文件路径 .databases
.tables 列出所有表名 .tables
.schema [表名] 查看表的建表语句(无表名则显示所有) .schema users
.mode 格式 设置查询结果显示格式(如列对齐、CSV) .mode column(列对齐);.mode csv
.header on/off 是否显示列名标题 .header on(显示标题)
.output 文件名 将查询结果输出到文件(默认输出到终端) .output result.txt
.read 文件名 执行 SQL 脚本文件中的命令 .read init.sql(执行 init.sql 脚本)
.exit.quit 退出命令行工具 .exit
.help 查看所有命令行工具命令 .help

三、使用示例(命令行流程)

  1. 创建并连接数据库

    复制代码
    sqlite3 mydb.db  # 若mydb.db不存在则创建,进入命令行交互模式
  2. 创建表并插入数据

    复制代码
    CREATE TABLE students (
      id INTEGER PRIMARY KEY,
      name TEXT NOT NULL,
      score REAL
    );
    ​
    INSERT INTO students (name, score) VALUES ('小明', 90.5), ('小红', 88);
  3. 查询数据(格式化显示)

    复制代码
    .mode column    # 列对齐显示
    .header on      # 显示列名
    SELECT * FROM students;

    输出:

    复制代码
    id          name        score      
    ----------  ----------  ----------
    1           小明         90.5       
    2           小红         88.0       
  4. 导出查询结果到文件

    复制代码
    .output scores.txt  # 结果输出到scores.txt
    SELECT name, score FROM students WHERE score > 85;
    .output stdout      # 恢复输出到终端
  5. 退出

    复制代码
    .exit

总结

  • 数据格式 :单一文件存储,动态类型(INTEGER/TEXT/REAL/BLOB 为主)。

  • 核心命令 :SQL 命令(CREATE/INSERT/SELECT 等)用于数据操作;命令行工具命令(.tables/.schema 等)用于辅助管理。

通过上述命令,可完成 SQLite 数据库的创建、表设计、数据增删改查等全部操作,适合轻量场景快速使用。

SQLite数据库简介

SQLite 是一款轻量级嵌入式关系型数据库,核心特点是零配置、跨平台、单文件存储,无需独立服务器即可运行。

一、核心特性

  1. 零配置部署:无需安装、启动服务,也不用配置用户名 / 密码,直接通过文件读写数据。

  2. 单文件存储 :整个数据库(表、索引、数据等)封装为单个文件(如 data.db),便于传输和备份。

  3. 跨平台兼容:数据库文件可在 Windows、Linux、macOS 等系统间无缝迁移,支持 32/64 位架构。

  4. 轻量高效:库体积极小(仅几十 KB),内存占用低,读写性能适配嵌入式设备和小型应用。

  5. 兼容标准 SQL:支持大部分 SQL92 标准语法,包括事务、索引、JOIN 查询、聚合函数等核心功能。

  6. 动态类型系统:列定义的类型仅为建议,可存储任意类型数据,灵活性高(但设计时建议遵循类型规范)。

二、适用场景

  • 嵌入式设备:智能硬件、物联网设备、机顶盒等资源受限场景。

  • 移动应用:iOS/Android 本地存储(如 App 缓存、用户数据)。

  • 小型应用:桌面工具、轻量 Web 应用(低并发场景)、测试环境。

  • 数据交换:作为临时数据载体,方便不同系统间传输结构化数据。

三、局限性

  • 不适合高并发写入:单文件存储机制导致并发写入性能较弱,不适合高吞吐场景(如大型网站后端)。

  • 功能简化:部分高级 SQL 特性支持有限(如 ALTER TABLE 功能受限、不支持自定义函数默认实现)。

  • 无用户权限管理:默认无身份验证和权限控制,需依赖外部机制保障数据安全。

四、核心优势总结

SQLite 以 "简单、轻量、零依赖" 为核心竞争力,无需复杂配置即可快速上手,是 "嵌入式场景 + 轻量数据存储" 的首选数据库。其单文件特性和跨平台兼容性,让数据管理和迁移变得极为便捷。

要不要我帮你整理一份SQLite 快速入门 cheat sheet,包含核心命令、数据类型和常用场景示例,方便你随时查阅?

相关推荐
last demo2 小时前
MariaDB 数据库管理
linux·运维·服务器·数据库·php·mariadb
蒋士峰DBA修行之路2 小时前
实验二十六 GaussDB参数调优
数据库·oracle·gaussdb
q***3752 小时前
MySQL输入密码后闪退?
数据库·mysql·adb
张人玉2 小时前
SQLite 快速入门 Cheat Sheet
数据库·sql·sqlite
杨DaB2 小时前
【MySQL】03 数据库的CRUD
数据库·mysql·adb
DarkAthena2 小时前
【DuckDB】活用marco以兼容GaussDB的SQL执行
数据库·sql·duckdb
沐浴露z2 小时前
一张思维导图理清【Redis】
数据库·redis·缓存
q***33372 小时前
mysql查看binlog日志
数据库·mysql
q***51892 小时前
MYSQL批量UPDATE的两种方式
数据库·mysql