SQLite

SQLite 是一个嵌入式、无服务器、零配置、事务性的关系型数据库引擎。

让我们来分解一下这个定义,以便更好地理解:

核心特点(与其他数据库如 MySQL、PostgreSQL 的主要区别)

  1. 嵌入式数据库
  • 大多数数据库(如 MySQL, PostgreSQL)是作为一个独立的"服务器"进程运行的,应用程序通过网络协议(如 TCP/IP)与之通信。
  • SQLite 则不同:它不是一个独立的进程,而是直接集成到你的应用程序中,成为应用程序的一部分。整个数据库(包括定义、表、索引和数据)就是一个普通的磁盘文件。
  1. 无服务器
  • 正因为它是嵌入式的,所以你不需要安装、配置、启动或管理一个单独的数据库服务器。这极大地简化了部署和维护。
  1. 零配置
  • 使用 SQLite 不需要任何复杂的安装或配置过程。只要你的程序引用了 SQLite 库,就可以直接开始创建、连接和操作数据库。
  1. 单一磁盘文件
  • 整个数据库通常存储在一个单一的、跨平台的标准磁盘文件中。这使得备份、传输和部署数据库变得非常简单------就像复制一个普通文件一样。
  1. 轻量级
  • SQLite 的代码库非常小,占用资源极少。它的 C 语言源码库只有几百 KB。这使得它非常适合在资源受限的环境中使用,比如嵌入式设备(手机、物联网设备)、桌面应用程序等。

它不是什么?

  • 它不是像 Oracle 或 MySQL 那样的客户端-服务器数据库。它不适合用于需要高并发写入(成千上万个用户同时写入)的复杂网络应用。
  • 它不是 NoSQL 数据库。它是一个关系型数据库,使用标准的 SQL 语法来管理和查询数据。

主要应用场景

由于其轻量、简单和高度可移植的特性,SQLite 在以下领域非常流行:

  1. 移动应用:iOS 和 Android 上的绝大多数应用都使用 SQLite 作为本地存储方案。
  2. 桌面软件:许多桌面应用程序(如浏览器、媒体播放器)用它来存储配置数据、历史记录、缓存等。
  3. 嵌入式系统与物联网:在资源有限的设备上,SQLite 是理想的数据存储解决方案。
  4. 小型网站:对于低流量或个人博客等小型网站,SQLite 完全可以胜任。
  5. 数据处理与分析:数据科学家和分析师经常用它来存储和处理中小型数据集,因为它比启动一个完整的数据库服务器要快得多。
  6. 应用程序的本地缓存:大型客户端-服务器应用可能会用 SQLite 在客户端缓存一部分数据,以提升性能和实现离线功能。

一个简单的例子

假设你正在用 Python 写一个程序,需要存储一些用户信息。使用 SQLite,你的代码看起来会是这样:

复制代码
import sqlite3

# 连接到数据库。如果文件 'mydatabase.db' 不存在,它会自动在当前目录创建。
conn = sqlite3.connect('mydatabase.db')

# 创建一个游标对象来执行 SQL 命令
cursor = conn.cursor()

# 执行 SQL 命令:创建一个表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL,
        age INTEGER
    )
''')

# 执行 SQL 命令:插入一条数据
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 30))

# 提交事务,保存更改
conn.commit()

# 关闭连接
conn.close()

执行完这段代码后,你的程序目录下就会生成一个名为 mydatabase.db 的文件,这就是你的 SQLite 数据库。

总结

SQLite 是一个极其简洁、高效、自包含的 SQL 数据库引擎,它以单个文件的形式存在,无需任何外部依赖或服务器管理。它是世界上部署最广泛的数据库,几乎无处不在,尤其适用于应用程序的本地数据存储场景。

当需要一个轻量级的、本地的、无需复杂管理的数据库时,SQLite 通常是首选。当需要处理高并发、大数据量、需要分布式架构的复杂网络应用时,则应考虑 MySQL、PostgreSQL 等客户端-服务器型数据库。

相关推荐
草明6 小时前
clickhouse 检查是否有删除语句在执行
数据库·clickhouse
风语者日志6 小时前
攻防世界—easyupload
数据库·web安全·ctf·小白入门
彡皮6 小时前
qt实用学习案例:数据库设计+图表显示+model-view模式+样式表定制
数据库·qt·学习
码出钞能力7 小时前
如何屏蔽GORM个别sql的日志
数据库·sql·gorm
TDengine (老段)7 小时前
TDengine 数字函数 RADIANS 用户手册
大数据·数据库·sql·物联网·时序数据库·tdengine·涛思数据
小蒜学长7 小时前
springboot基于JAVA的二手书籍交易系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
野犬寒鸦7 小时前
从零起步学习MySQL || 第七章:初识索引底层运用及性能优化(结合底层数据结构讲解)
java·数据库·后端·mysql·oracle
6极地诈唬8 小时前
【sqlite】WAL初探
数据库·sqlite
PieroPc8 小时前
用Python Streamlit sqlite3 写一个简单博客
数据库·python·sqlite