SQLite3 介绍与入门 – wiki基地


探索 SQLite3:一款嵌入式数据库的深度介绍与入门指南

数据库是现代软件应用的核心组件之一,用于存储、管理和检索数据。在我们谈论数据库时,脑海中可能会浮现出 PostgreSQL、MySQL、SQL Server、Oracle 等强大的客户端/服务器架构数据库。然而,除了这些“巨头”,还有一种类型数据库在很多场景下发挥着不可替代的作用——嵌入式数据库。在这其中,SQLite 无疑是最知名、使用最广泛的一员。

本文将带您深入了解 SQLite3,从它的基本概念、独特优势、适用场景,到如何安装、使用命令行界面以及在编程语言中集成它,提供一份全面的入门指南。

第一部分:SQLite3 是什么?理解其核心概念

1. SQLite 的定义

SQLite 是一个无服务器(serverless)、自给自足(self-contained)、零配置(zero-configuration)、事务性(transactional)的 SQL 数据库引擎。它的独特之处在于,它不是一个独立的服务器进程,而是一个可以嵌入到应用程序中的 C 语言库。这意味着数据库本身不是通过网络服务来访问,而是通过应用程序调用 SQLite 库的函数来直接操作存储在单个文件中的数据库。

2. “无服务器” (Serverless) 架构

这是 SQLite 最核心的特性之一。传统的数据库系统采用客户端/服务器架构:一个或多个客户端通过网络连接到数据库服务器进程,服务器负责处理请求、管理数据、并发控制等。

而 SQLite 中没有独立的数据库服务器进程。数据库引擎(即 SQLite 库)直接运行在应用程序的进程空间内。应用程序通过调用库函数来执行 SQL 命令,库函数直接读写磁盘上的数据库文件。这种架构极大地简化了部署和管理,但也带来了不同的并发处理方式(后续会讨论)。

3. “自给自足” (Self-contained)

SQLite 库本身就是一个完整的数据库系统。它不需要外部依赖(除了操作系统和标准 C 库)。整个数据库系统通常包含在一个单一的 .c 文件中(虽然实际开发中通常编译为 .o.so/.dll 文件),编译后的大小非常小巧,这使得它非常适合资源受限的环境。

数据库的所有数据,包括表、索引、配置等,都存储在一个标准的磁盘文件中(通常以 .db, .sqlite, 或 .sqlite3 为扩展名)。整个数据库就是一个文件,这使得备份、迁移、复制变得异常简单——就像复制任何其他文件一样。

4. “零配置” (Zero-configuration)

使用 SQLite 几乎不需要进行任何配置。你不需要安装和启动数据库服务器、设置用户权限、配置网络端口等。当你需要创建一个新的数据库时,只需指定一个文件路径;如果该文件不存在,SQLite 会自动为你创建它。

5. “事务性” (Transactional) – ACID 特性

尽管 SQLite 是一个嵌入式数据库,但它完全支持事务,并且严格遵守 ACID(原子性、一致性、隔离性、持久性)原则。

  • 原子性 (Atomicity): 一个事务中的所有操作要么全部成功,要么全部失败回滚,不会出现部分成功的状态。
  • 一致性 (Consistency): 事务开始和结束时,数据库的状态都必须保持一致性(符合预定义的规则和约束)。
  • 隔离性 (Isolation): 并发执行的事务彼此之间是隔离的,一个事务的执行不会影响其他事务的执行,就好像它们是串行执行一样。SQLite 提供多种隔离级别。
  • 持久性 (Durability): 事务提交后,其结果是永久性的,即使系统发生故障也不会丢失。

ACID 特性是保证数据可靠性和完整性的基石,SQLite 在这方面表现出色。

6. SQLite3 中的 “3”

SQLite 至今发布过多个主要版本。目前最常用且功能最完善的是 SQLite 版本 3,因此通常我们提到的 SQLite 就是指 SQLite3。从 SQLite 2 到 SQLite 3 是一个重大升级,引入了更多功能和更好的性能。

第二部分:为什么选择 SQLite3?优势与适用场景

理解了 SQLite 的基本概念后,它的优势和适用场景也就呼之欲出了。

1. 核心优势

  • 极简的部署与管理: 无需安装服务器,无需配置,数据库就是一个文件。这对于开发者来说,大大降低了入门门槛和开发难度;对于用户来说,应用程序的安装包通常只需要包含 SQLite 库即可,部署过程非常简单。
  • 高度可移植性: 数据库存储在单个文件中,可以在不同操作系统和文件系统之间轻松复制和移动。SQLite 库本身也可以在几乎所有主流操作系统和硬件架构上编译和运行。
  • 资源占用低: SQLite 的库文件非常小(通常几十KB到几MB,取决于编译选项),运行时占用的内存和 CPU 资源也很少。这使得它非常适合在资源受限的设备上使用。
  • ACID 兼容性: 尽管轻量,但提供了企业级数据库才具备的 ACID 事务特性,保证了数据操作的可靠性。
  • 高性能 (针对特定场景): 在读操作为主、单用户或低并发写入的场景下,SQLite 的性能通常非常好,甚至可能超过客户端/服务器数据库,因为它避免了网络通信和进程间通信的开销。对于嵌入式应用,直接读写本地文件通常比通过网络连接到服务器更快。
  • 强大的 SQL 支持: SQLite 支持 SQL92 标准的大部分查询语言特性,包括复杂的 SELECT 语句、JOIN、子查询、视图、触发器、索引等。它还提供了一些独特的非标准功能。
  • 稳定与可靠: SQLite 拥有庞大的用户群体和长时间的实战检验,其代码库非常稳定,并且经过严格的测试。
  • 公共领域 (Public Domain): SQLite 的源代码处于公共领域,这意味着你可以出于任何目的免费使用、复制、修改、分发 SQLite,无需担心版权问题。

2. 典型的适用场景

基于上述优势,SQLite 在以下场景中表现出色:

  • 移动应用程序: iOS 和 Android 的原生开发都广泛使用 SQLite 来存储应用程序数据。这是 SQLite 最重要的应用领域之一。
  • 桌面应用程序: 许多桌面软件使用 SQLite 来管理本地数据,例如网络浏览器(Chrome, Firefox 的历史记录、书签、Cookie 等)、邮件客户端、本地文件管理工具、笔记应用等。
  • 嵌入式系统与 IoT 设备: 路由器、机顶盒、智能家居设备、消费电子产品等资源有限的设备常常使用 SQLite 来存储配置信息、日志或采集的数据。
  • 开发与原型设计: SQLite 是一个非常方便的本地数据库,用于快速构建原型、进行开发阶段的数据存储和测试。无需搭建复杂的数据库环境,只需几行代码就能开始使用。
  • 文件格式: 有些应用程序使用 SQLite 数据库文件作为复杂数据的文件格式,而不是定义自己的二进制或文本格式。这种方式可以利用 SQL 的强大查询能力,并且保证数据的结构化和一致性。
  • 低流量网站: 对于访问量很小的网站或个人博客,SQLite 可以作为后端数据库使用,避免了维护单独数据库服务器的成本和复杂性。
  • 数据分析与本地缓存: SQLite 可以用来存储抓取的数据、大型数据集的子集,或者作为应用程序的本地缓存。

3. 何时不应使用 SQLite?

尽管 SQLite 有诸多优点,但它并非万能。以下场景下,客户端/服务器数据库(如 PostgreSQL, MySQL)可能是更好的选择:

  • 高并发写入: SQLite 在同一时刻只允许一个进程进行写入操作(通过文件锁机制实现)。虽然多个进程可以同时读取,但写操作的竞争会导致性能瓶颈甚至超时错误。对于需要处理大量并发写入请求的 Web 服务后端等场景,SQLite 力有未逮。
  • 大型、多用户的企业级应用: 这些应用通常需要更复杂的权限管理、复制、分片、高可用性以及专业的监控和管理工具,这些都是 SQLite 所缺乏的。
  • 需要强大的网络访问功能: SQLite 是本地数据库,不支持通过网络直接访问。如果你的应用需要在不同的机器上共享访问同一个数据库,客户端/服务器数据库是必需的。
  • 非常大的数据集: 虽然 SQLite 可以处理 PB 级别的数据,但在数据量非常大时,其性能和管理复杂性可能会成为问题,特别是与大型客户端/服务器数据库相比。

第三部分:SQLite3 入门实操:安装与命令行界面 (CLI)

理论知识铺垫完毕,现在我们开始动手实践。

1. 安装 SQLite3

SQLite3 通常是许多操作系统和开发环境的内置组件。

  • macOS 和 Linux: 大多数现代的 macOS 和 Linux 发行版都预装了 SQLite3 命令行工具。你可以在终端中输入 sqlite3 --version 来检查是否已安装及其版本。
    bash
    sqlite3 --version
    # 例如输出:3.38.5 2022-05-06 15:21:00 ...

    如果未安装,可以使用系统的包管理器进行安装:

    • Debian/Ubuntu: sudo apt-get install sqlite3
    • Fedora/CentOS/RHEL: sudo yum install sqlite3
    • macOS (使用 Homebrew): brew install sqlite
  • Windows: Windows 系统通常不自带 SQLite3。你可以从 SQLite 官网 (https://www.sqlite.org/download.html) 下载预编译的二进制文件。找到 “Precompiled Binaries for Windows”,下载 sqlite-tools-win64-x64-...zip (根据你的系统选择 32 或 64 位)。解压后,将包含 sqlite3.exe 的文件夹添加到系统的 PATH 环境变量中,或者直接在该文件夹中打开命令提示符或 PowerShell 运行 sqlite3.exe

2. 使用 SQLite3 命令行界面 (CLI)

CLI 是学习和测试 SQLite 的最直接方式。

启动 SQLite3:

打开终端或命令提示符,输入 sqlite3 命令。

  • 创建或打开数据库文件:
    • 不带参数运行 sqlite3 会启动一个内存数据库(数据不会保存到文件)。
    • 指定一个文件名来创建或打开一个数据库文件:
      bash
      sqlite3 mydatabase.db

      如果 mydatabase.db 文件不存在,SQLite 会创建它。如果存在,它会打开现有数据库。
      成功启动后,你将看到 SQLite version ... 的信息,然后是 sqlite> 提示符。

CLI 的基本命令 (. 开头的命令):

sqlite> 提示符下,可以输入特殊的以点(.)开头的命令来控制 CLI 环境,而不是执行 SQL 语句。

  • .help: 显示所有可用的点命令列表。
  • .quit.exit: 退出 SQLite CLI。
  • .tables: 显示当前数据库中所有的表名。
  • .schema [table_name]: 显示一个或所有表的 CREATE TABLE 语句,查看表的结构。
  • .mode mode_name: 设置输出模式。常用的模式包括:
    • list (默认): 以 “|” 分隔字段。
    • column: 以列对齐方式显示结果,更易读(通常需要配合 .headers on)。
    • csv: 以 CSV 格式输出。
    • html: 以 HTML 表格格式输出。
  • .headers on/off: 显示或隐藏结果集的列头。
  • .show: 显示当前 CLI 的设置(如模式、是否显示头信息等)。
  • .backup [database_file]: 备份当前数据库到一个新的文件。
  • .restore [database_file]: 从一个文件恢复数据库。

执行 SQL 语句:

sqlite> 提示符下,你可以直接输入标准的 SQL 语句。每条 SQL 语句必须以分号(;)结束。

CLI 实践示例:

  1. 启动 SQLite 并创建数据库文件:
    bash
    sqlite3 myapp.db

    (如果文件不存在,现在已经创建了)

  2. 创建一个表:
    sql
    CREATE TABLE users (
    user_id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT NOT NULL UNIQUE,
    email TEXT UNIQUE,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
    );

    > INTEGER PRIMARY KEY AUTOINCREMENT: 定义一个自增的主键列。
    > NOT NULL: 该列的值不能为空。
    > UNIQUE: 该列的值必须唯一。
    > DEFAULT CURRENT_TIMESTAMP: 如果插入时未指定该列的值,则默认为当前时间。

  3. 查看表结构:
    sqlite
    .schema users

    输出应显示你刚刚执行的 CREATE TABLE 语句。

  4. 查看当前数据库中的所有表:
    sqlite
    .tables

    应该会显示 users

  5. 插入数据:
    sql
    INSERT INTO users (username, email) VALUES ('alice', '[email protected]');
    INSERT INTO users (username, email) VALUES ('bob', '[email protected]');
    INSERT INTO users (username, email) VALUES ('charlie', '[email protected]');

  6. 查询数据:

    • 查询所有用户的所有信息:
      sql
      SELECT * FROM users;
    • 查询特定列:
      sql
      SELECT username, email FROM users;
    • 带条件的查询:
      sql
      SELECT * FROM users WHERE username = 'bob';
    • 设置输出模式并重新查询:
      sqlite
      .mode column
      .headers on
      SELECT * FROM users;

      现在输出应该更整齐,带有列头。
  7. 更新数据:
    sql
    UPDATE users SET email = '[email protected]' WHERE username = 'alice';

  8. 删除数据:
    sql
    DELETE FROM users WHERE username = 'charlie';

  9. 再次查询,验证更新和删除:
    sql
    SELECT * FROM users;

  10. 删除表:
    sql
    DROP TABLE users;

  11. 退出 CLI:
    sqlite
    .quit

    数据库的更改会保存到 myapp.db 文件中。

通过 CLI,你可以快速学习和测试 SQLite 的基本操作。

第四部分:SQLite 的数据类型与 SQL 基础

SQLite 在数据类型方面有其独特之处,它采用动态类型系统,或者更准确地说,是类型亲和性 (Type Affinity)。这意味着你可以在 CREATE TABLE 语句中指定数据类型(如 INT, VARCHAR, TEXT),但 SQLite 并不会严格执行这些类型。存储在列中的值的类型取决于值本身,而不是列声明的类型。列声明的类型仅仅是“建议”SQLite 如何处理存储在该列中的值。

SQLite 支持以下五种基本存储类(Storage Classes):

  1. NULL: 值是 NULL。
  2. INTEGER: 值是一个带符号的整数,存储为 1, 2, 3, 4, 6 或 8 字节,具体取决于值的大小。
  3. REAL: 值是一个浮点数,存储为 8 字节的 IEEE 浮点数。
  4. TEXT: 值是一个文本字符串,使用数据库编码(UTF-8, UTF-16BE 或 UTF-16LE)存储。
  5. BLOB: 值是一个二进制大对象,以其输入的原样存储。

SQLite 识别许多常用的 SQL 数据类型名称(如 INT, VARCHAR, DOUBLE, BOOLEAN, DATE 等),并将它们映射到这五种存储类中的一种,这个映射规则就是类型亲和性。例如,INT, INTEGER, TINYINT, SMALLINT, MEDIUMINT, BIGINT, UNSIGNED BIG INT, INT2, INT8 都具有 INTEGER 亲和性;CHARACTER(20), VARCHAR(255), VARYING CHARACTER(255), NCHAR(55), NATIVE CHARACTER(70), NVARCHAR(100) 都具有 TEXT 亲和性。

这带来了灵活性,但也可能导致一些意想不到的行为,特别是当你习惯了静态类型数据库时。通常,为了清晰起见,在 CREATE TABLE 语句中还是建议使用常见的类型名,比如 INTEGER, TEXT, REAL, BLOB

SQL 基础回顾 (在 SQLite 中的应用):

SQLite 支持标准的 SQL 语法,以下是一些常用操作的语法回顾:

  • 创建表:
    sql
    CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    ...
    );

    常用约束: PRIMARY KEY, NOT NULL, UNIQUE, DEFAULT default_value, CHECK (expression), FOREIGN KEY (column) REFERENCES other_table (other_column).

  • 插入数据:
    sql
    INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
    -- 插入所有列,按定义顺序
    INSERT INTO table_name VALUES (value1, value2, ...);

  • 查询数据:
    sql
    SELECT column1, column2, ... FROM table_name
    WHERE condition -- 可选,筛选行
    ORDER BY column [ASC|DESC] -- 可选,排序
    LIMIT count [OFFSET offset]; -- 可选,限制结果数量

  • 更新数据:
    sql
    UPDATE table_name
    SET column1 = new_value1, column2 = new_value2, ...
    WHERE condition; -- 必须,否则更新所有行

  • 删除数据:
    sql
    DELETE FROM table_name
    WHERE condition; -- 必须,否则删除所有行

  • 删除表:
    sql
    DROP TABLE table_name;

  • 添加列:
    sql
    ALTER TABLE table_name ADD COLUMN column_name datatype constraint;

    SQLite 的 ALTER TABLE 功能相对有限,不支持删除或修改列。如果需要更复杂的模式修改,通常需要创建新表,复制数据,然后替换旧表。

  • 创建索引:
    sql
    CREATE INDEX index_name ON table_name (column1, column2, ...);

    索引可以显著提高查询性能,尤其是在 WHERE 子句或 JOIN 条件中使用的列上。

  • 事务控制:
    sql
    BEGIN TRANSACTION; -- 或 BEGIN;
    -- 执行一系列 SQL 语句
    COMMIT; -- 提交事务,永久保存更改
    ROLLBACK; -- 回滚事务,撤销所有更改

第五部分:在编程语言中集成 SQLite3

SQLite 的核心价值在于它是一个库,可以轻松地嵌入到各种应用程序中。几乎所有主流编程语言都有成熟的 SQLite 绑定或驱动。

这里以 Python 为例,展示如何在应用程序中使用 SQLite:

Python 标准库中内置了 sqlite3 模块,无需额外安装。

“`python
import sqlite3
import os

定义数据库文件路径

db_file = ‘mydatabase.db’

如果数据库文件已存在,先删除以便每次运行都是全新的例子

if os.path.exists(db_file):
os.remove(db_file)

1. 连接到数据库

如果数据库文件不存在,connect() 会自动创建

isolation_level=None 表示自动提交事务,方便演示,

生产环境中建议手动控制事务 (BEGIN/COMMIT/ROLLBACK)

conn = sqlite3.connect(db_file, isolation_level=None)
print(f”成功连接到数据库: {db_file}”)

2. 创建游标对象

游标用于执行 SQL 命令和获取结果

cursor = conn.cursor()

try:
# 3. 创建表 (使用 CREATE TABLE IF NOT EXISTS 防止重复创建报错)
cursor.execute(”’
CREATE TABLE IF NOT EXISTS products (
product_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL NOT NULL,
quantity INTEGER DEFAULT 0
);
”’)
print(“表 ‘products’ 创建成功或已存在。”)

# 4. 插入数据
# 推荐使用参数化查询,防止 SQL 注入
cursor.execute("INSERT INTO products (name, price, quantity) VALUES (?, ?, ?)", ('Laptop', 1200.00, 10))
cursor.execute("INSERT INTO products (name, price, quantity) VALUES (?, ?, ?)", ('Keyboard', 75.50, 25))
# 插入多条数据
products_to_insert = [
    ('Mouse', 25.00, 50),
    ('Monitor', 300.00, 5),
    ('Webcam', 50.00, 15)
]
cursor.executemany("INSERT INTO products (name, price, quantity) VALUES (?, ?, ?)", products_to_insert)
print(f"插入了 {1 + 1 + len(products_to_insert)} 条数据。") # 插入了两条,然后多条

# 自动提交已开启 (isolation_level=None),所以插入操作已保存。
# 如果 isolation_level 不是 None,需要手动调用 conn.commit()

# 5. 查询数据
print("\n查询所有产品:")
cursor.execute("SELECT product_id, name, price, quantity FROM products")
# 获取所有结果
rows = cursor.fetchall()
for row in rows:
    print(row)

print("\n查询价格大于 100 的产品:")
cursor.execute("SELECT name, price FROM products WHERE price > ?", (100,))
# 获取第一个结果
laptop_info = cursor.fetchone()
print(laptop_info)
# 获取剩余结果
remaining_rows = cursor.fetchall()
print("剩余结果:")
for row in remaining_rows:
     print(row)


# 6. 更新数据
cursor.execute("UPDATE products SET price = ? WHERE name = ?", (1150.00, 'Laptop'))
print("\n更新了 Laptop 的价格。")

# 7. 删除数据
cursor.execute("DELETE FROM products WHERE name = ?", ('Webcam',))
print("删除了 Webcam。")

# 8. 再次查询以验证更改
print("\n再次查询所有产品:")
cursor.execute("SELECT * FROM products")
rows_after_changes = cursor.fetchall()
for row in rows_after_changes:
    print(row)

# 9. 使用 SELECT count(*) 查询行数
cursor.execute("SELECT COUNT(*) FROM products")
count = cursor.fetchone()[0]
print(f"\nproducts 表中当前有 {count} 行数据。")

except sqlite3.Error as e:
print(f”数据库操作发生错误: {e}”)
# 如果 isolation_level 不是 None,并且发生错误,需要 conn.rollback()
if conn:
# conn.rollback() # 如果需要手动回滚
pass

finally:
# 10. 关闭连接
if conn:
conn.close()
print(“\n数据库连接已关闭。”)

“`

这个 Python 示例涵盖了连接数据库、创建表、插入数据(包括单条和多条,使用参数化查询)、查询数据(获取所有、获取单条)、更新数据、删除数据以及关闭连接的基本操作。其他编程语言的 SQLite 库提供了类似的 API。

第六部分:高级特性与实用技巧

SQLite 除了基本的 SQL 功能,还提供了一些高级特性和实用技巧:

  • WAL (Write-Ahead Logging) 模式: 这是 SQLite 3.7.0 引入的一种新的日志模式,可以显著提高并发读取性能,因为读操作不再阻塞写操作(反之亦然)。默认模式是 Journal 模式,写操作会锁定整个数据库文件。可以通过 PRAGMA journal_mode=WAL; 命令开启 WAL 模式。
  • PRAGMA 命令: SQLite 提供了许多 PRAGMA 命令来控制数据库引擎的运行时行为和查询非表数据(如版本信息、完整性检查等)。常用的 PRAGMA 包括:
    • PRAGMA integrity_check;: 检查数据库文件是否损坏。
    • PRAGMA foreign_keys = ON;: 启用外键约束检查(SQLite 默认不强制执行外键,需要手动开启)。
    • PRAGMA busy_timeout = milliseconds;: 设置当数据库被锁定时等待的时间。
    • PRAGMA page_size; PRAGMA cache_size;: 查看或设置页面大小和缓存大小。
  • 附着数据库 (ATTACH DATABASE): 允许你在一个连接中同时访问多个数据库文件。
    sql
    ATTACH DATABASE 'another.db' AS another_db;
    SELECT * FROM main.users JOIN another_db.orders ON ...;
  • 自定义函数 (User-Defined Functions – UDFs): 可以使用 C 或其他语言编写自定义函数,并在 SQL 查询中调用它们。大多数语言绑定(如 Python 的 sqlite3 模块)也提供了注册 Python 函数作为 SQL 函数的能力。
  • 全文搜索 (Full-Text Search – FTS): SQLite 提供了 FTS 模块,支持在文本内容中进行高效的关键字搜索。
  • JSON 支持: SQLite 3.38.0 (2021-12-08) 开始内置了完整的 JSON 支持,可以使用 JSON 函数进行 JSON 数据的存储、查询和操作。

实用技巧:

  • 使用参数化查询: 这是防止 SQL 注入的最佳实践,同时也更高效。永远不要直接拼接用户输入来构建 SQL 语句。
  • 索引优化: 对于频繁用于搜索、排序或连接的列,创建索引可以大幅提升查询速度。使用 EXPLAIN QUERY PLAN 语句可以查看 SQLite 如何执行你的查询,帮助识别性能瓶颈。
  • 备份数据库: 备份 SQLite 数据库最简单的方法就是复制数据库文件。但在复制时,确保数据库文件当前没有正在进行写操作,或者使用 .backup CLI 命令/相应的 API 函数,它们可以处理正在进行写操作的数据库。
  • 使用数据库浏览器: 对于可视化管理 SQLite 数据库,像 DB Browser for SQLite 这样的图形界面工具非常有用,可以方便地查看数据、修改模式、执行查询等。

第七部分:局限性回顾与总结

虽然 SQLite 功能强大且用途广泛,但再次强调其主要局限性:

  • 写并发限制: 尽管 WAL 模式有所改进,但 SQLite 仍然不是为高并发写入而设计的数据库。在需要大量并发写入的场景下,可能会遇到锁竞争问题。
  • 网络访问缺失: SQLite 数据库文件必须直接存储在应用程序可以访问的本地文件系统上。无法像客户端/服务器数据库那样通过网络连接到远程数据库实例。
  • 管理工具相对简单: 相较于大型数据库系统,SQLite 的监控、性能调优、高级复制、集群等管理工具生态相对不成熟。
  • 没有用户权限系统: SQLite 是基于文件权限来控制访问的,没有内置的用户账户和精细的权限控制系统。这意味着任何可以访问数据库文件的人都可以访问其中的所有数据。

总结:

SQLite3 是一款卓越的嵌入式数据库引擎。它的无服务器、零配置、自给自足的特性使其成为构建轻量级、可移植应用程序的理想选择。凭借强大的 SQL 支持、ACID 事务以及低资源占用,SQLite 在移动开发、桌面应用、嵌入式系统等领域占据主导地位。

虽然它不适合作为高并发、大规模企业级应用的中心数据库,但在其设计的 niche 中,SQLite 提供了无与伦比的便利性和效率。掌握 SQLite3 的使用,对于现代软件开发者来说是一项非常有价值的技能。

希望这篇详细的介绍与入门指南能帮助您全面了解 SQLite3 并顺利迈出使用它的第一步!开始您的 SQLite 探索之旅吧!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部