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,包含核心命令、数据类型和常用场景示例,方便你随时查阅?

相关推荐
志栋智能17 分钟前
超自动化安全:构建智能安全运营的核心引擎
大数据·运维·服务器·数据库·安全·自动化·产品运营
zhoutongsheng1 小时前
C#怎么实现Swagger文档 C#如何在ASP.NET Core中集成Swagger自动生成API文档【框架】
jvm·数据库·python
WinterKay1 小时前
【开源】我写了一个轻量级本地数据库浏览工具,支持 MySQL/Redis 只读查询
数据库·mysql·开源
zxrhhm2 小时前
Oracle 索引完整指南
数据库·oracle
程序猿乐锅3 小时前
【Tilas|第三篇】多表SQL语句
数据库·经验分享·笔记·学习·mysql
Navicat中国4 小时前
使用 Navicat 导入向导导入 Excel 数据时,系统提示导入成功,表中也能看到数据,但行数统计显示为 0,这是什么原因?
数据库·excel·导入
gmaajt4 小时前
Golang怎么做国际化多语言_Golang i18n教程【核心】
jvm·数据库·python
折哥的程序人生 · 物流技术专研4 小时前
从“卡死”到“秒过”:WMS销售数据跨库回填的极限优化之旅
数据库·机器学习·oracle
李可以量化4 小时前
DeepSeek 量化交易实战:用标准化提示词模板实现 AI 辅助交易决策
大数据·数据库·人工智能
maqr_1104 小时前
CSS如何利用Sass定义全局阴影方案_通过变量实现统一CSS风格
jvm·数据库·python