深入浅出SQLite3:从零开始学习嵌入式数据库 – wiki基地

I apologize for the repeated error. It appears I do not have a tool that allows direct file writing. Given this limitation, I will provide the content of the article as a text response. You can then copy and save it to a file.

Here is the article:

深入浅出SQLite3:从零开始学习嵌入式数据库

引言

在软件开发领域,数据存储是不可或缺的一环。当我们谈论数据库时,通常会想到MySQL、PostgreSQL、MongoDB等大型客户端-服务器架构的数据库系统。然而,在许多场景下,特别是对于资源受限的嵌入式系统、移动应用或桌面应用而言,这些庞大的数据库可能显得过于笨重。这时,SQLite3便以其轻量、高效、无需独立服务器的特性脱颖而出,成为嵌入式数据库的首选。

本文将带领你从零开始,深入浅出地学习SQLite3,理解其核心概念,掌握基本操作,并探讨它在实际项目中的应用。

什么是SQLite3?

SQLite3是一个开源、零配置、无服务器、独立的事务型SQL数据库引擎。它的特点在于:

  1. 零配置(Zero-configuration):无需安装或管理独立的服务器进程。数据库文件本身就是完整的数据库,可以直接使用。
  2. 无服务器(Serverless):应用程序直接读写数据库文件,不通过任何中间服务器进程。这极大地简化了部署和管理。
  3. 独立(Self-contained):SQLite3引擎本身是一个紧凑的C语言库,可以轻松嵌入到各种应用程序中。
  4. 事务型(Transactional):支持ACID(原子性、一致性、隔离性、持久性)事务,确保数据完整性和可靠性。
  5. 文件存储:整个数据库(定义、表、索引和数据)存储在一个单一的、普通的磁盘文件中。
  6. 跨平台:可以在多种操作系统上运行,包括Windows、Linux、macOS、Android、iOS等。

SQLite3的优势与应用场景

优势

  • 轻量级:库文件体积小,内存占用低。
  • 易于使用:无需复杂的设置,直接操作文件即可。
  • 高性能:对于大多数嵌入式和本地应用,其性能足以满足需求。
  • 可靠性高:ACID事务保证数据安全。
  • 兼容性好:支持标准SQL语法。

应用场景

  • 移动应用:iOS和Android的本地数据存储。
  • 桌面应用:如Firefox、Chrome等浏览器用于存储书签、历史记录等。
  • 嵌入式设备:如智能家居、物联网设备、路由器等,存储配置或日志数据。
  • 小型网站:流量不大的个人博客或小型项目。
  • 文件格式:一些应用程序使用SQLite作为内部文件格式。
  • 开发测试:作为开发阶段的本地数据库,快速迭代。

SQLite3基本操作

我们将通过命令行工具sqlite3来演示SQLite3的基本操作。

1. 安装SQLite3(如果未安装)

大多数Linux和macOS系统都预装了sqlite3。Windows用户可以从SQLite官方网站下载预编译的二进制文件,并将其添加到系统PATH中。

2. 创建和连接数据库

打开命令行工具,输入sqlite3 your_database_name.db即可创建一个新的数据库文件(如果不存在)并连接到它。

bash
sqlite3 mydata.db

连接成功后,你会看到sqlite>提示符。

3. 创建表

使用CREATE TABLE语句创建表。

sql
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
email TEXT UNIQUE
);

  • INTEGER PRIMARY KEY AUTOINCREMENT: 定义一个自增的整数主键。
  • TEXT NOT NULL: 定义一个非空的文本字段。
  • UNIQUE: 确保该字段的值是唯一的。

4. 插入数据

使用INSERT INTO语句向表中插入数据。

sql
INSERT INTO users (name, age, email) VALUES ('Alice', 30, '[email protected]');
INSERT INTO users (name, age, email) VALUES ('Bob', 24, '[email protected]');
INSERT INTO users (name, age, email) VALUES ('Charlie', 35, '[email protected]');

5. 查询数据

使用SELECT语句查询数据。

“`sql
— 查询所有用户
SELECT * FROM users;

— 查询指定列
SELECT name, email FROM users WHERE age > 25;

— 排序
SELECT * FROM users ORDER BY age DESC;

— 限制结果数量
SELECT * FROM users LIMIT 1;
“`

6. 更新数据

使用UPDATE语句更新数据。

sql
UPDATE users SET age = 31 WHERE name = 'Alice';

7. 删除数据

使用DELETE FROM语句删除数据。

“`sql
— 删除单个用户
DELETE FROM users WHERE name = ‘Bob’;

— 删除所有数据 (慎用)
— DELETE FROM users;
“`

8. 删除表

使用DROP TABLE语句删除表。

sql
DROP TABLE users;

9. 常用.commands

sqlite>提示符下,可以使用.commands来执行一些控制命令:

  • .tables: 列出所有表。
  • .schema <table_name>: 显示表的创建语句。
  • .databases: 列出所有附加的数据库。
  • .quit.exit: 退出SQLite命令行。
  • .headers on: 显示查询结果的列头。
  • .mode column: 以列模式显示结果,更易读。

sql
sqlite> .headers on
sqlite> .mode column
sqlite> SELECT * FROM users;

在编程语言中使用SQLite3

SQLite3提供了丰富的API,几乎所有主流编程语言都支持它。这里以Python为例。

Python中使用sqlite3模块

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

“`python
import sqlite3

1. 连接到数据库 (如果文件不存在则创建)

conn = sqlite3.connect(‘example.db’)
cursor = conn.cursor()

2. 创建表

cursor.execute(”’
CREATE TABLE IF NOT EXISTS stocks (
date TEXT,
trans TEXT,
symbol TEXT,
qty REAL,
price REAL
)
”’)

3. 插入数据

cursor.execute(“INSERT INTO stocks VALUES (‘2023-01-05′,’BUY’,’RHAT’,100,35.14)”)

批量插入

purchases = [
(‘2023-01-06’, ‘SELL’, ‘MSFT’, 50, 200.00),
(‘2023-01-07’, ‘BUY’, ‘GOOG’, 150, 1500.00),
]
cursor.executemany(‘INSERT INTO stocks VALUES (?,?,?,?,?)’, purchases)

4. 查询数据

cursor.execute(‘SELECT * FROM stocks WHERE symbol = “RHAT”‘)
print(“Querying ‘RHAT’:”)
for row in cursor:
print(row)

5. 更新数据

cursor.execute(‘UPDATE stocks SET price = 36.00 WHERE symbol = “RHAT”‘)

6. 删除数据

cursor.execute(‘DELETE FROM stocks WHERE symbol = “MSFT”‘)

提交事务 (非常重要,否则更改不会保存)

conn.commit()

再次查询所有数据

print(“\nAll stocks after update and delete:”)
cursor.execute(‘SELECT * FROM stocks’)
for row in cursor:
print(row)

7. 关闭连接

conn.close()
“`

总结

SQLite3以其独特的零配置、无服务器特性,在嵌入式数据库领域占据了举足轻重的地位。无论是移动应用、桌面软件,还是物联网设备,它都提供了一个轻量、高效且可靠的数据存储解决方案。通过本文的学习,你应该对SQLite3的核心概念、基本SQL操作以及在编程语言中的使用有了全面的了解。

掌握SQLite3,你将能够为你的应用程序选择更合适的数据库方案,开发出更加灵活和高效的软件。现在,开始你的SQLite3之旅吧!

进一步学习

  • SQLite官方文档https://www.sqlite.org/docs.html
  • SQL教程:学习更高级的SQL语法,如联接(JOIN)、子查询等。
  • 特定语言的SQLite驱动:深入了解你所使用的编程语言中SQLite API的细节。

发表评论

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

滚动至顶部