SQLite 快速入门指南 – wiki大全

SQLite 快速入门指南

1. 引言

SQLite 是一个进程内的数据库,而不是一个独立的服务器进程。这意味着它是一个零配置的数据库,不需要单独的服务器进程或系统管理。它以文件的形式存储数据,整个数据库(定义、表、索引和数据)都存储在一个单一的文件中。由于其轻量级、高性能和易于集成的特性,SQLite 被广泛应用于移动设备、桌面应用程序、Web 浏览器以及小型网站等场景。

本指南将带领您从零开始,快速掌握 SQLite 的基本概念、常用操作和如何在命令行界面 (CLI) 中使用它。

2. 安装 SQLite

SQLite 不需要传统的“安装”过程。它通常以一个小的库文件形式提供。

  • Windows:
    1. 访问 SQLite 官方下载页面
    2. 在 “Precompiled Binaries for Windows” 部分,下载 sqlite-tools-win32-x86-*.zip(32 位)或 sqlite-tools-win32-x64-*.zip(64 位)。
    3. 解压 ZIP 文件到您选择的目录(例如 C:\sqlite)。
    4. 将解压后的目录添加到系统的 PATH 环境变量中,这样您就可以在任何位置运行 sqlite3 命令。
    5. 打开命令提示符 (CMD) 或 PowerShell,输入 sqlite3 并按 Enter。如果看到 SQLite version ... 的提示,则表示安装成功。
  • macOS:
    macOS 系统通常预装了 SQLite。您可以在终端中输入 sqlite3 来验证。如果未安装或版本过旧,您可以使用 Homebrew 进行安装:
    bash
    brew install sqlite
  • Linux:
    大多数 Linux 发行版都预装了 SQLite。您可以在终端中输入 sqlite3 来验证。如果未安装,可以使用包管理器进行安装:

    • Debian/Ubuntu:
      bash
      sudo apt-get install sqlite3
    • Fedora/CentOS:
      bash
      sudo yum install sqlite

      或者
      bash
      sudo dnf install sqlite

3. 基本概念

在深入学习之前,了解一些基本概念至关重要:

  • 数据库 (Database): 存储相关数据的集合,在 SQLite 中表现为一个单独的文件。
  • 表 (Table): 数据库中的结构化数据单元,由行和列组成,用于存储特定类型的数据(例如,“用户”表,“产品”表)。
  • 列 (Column): 表中的一个字段,定义了存储在其中的数据类型(例如:姓名、年龄、邮箱)。
  • 行 (Row): 表中的一条记录,包含了所有列的数据。
  • 主键 (Primary Key): 一列或一组列,其值能唯一标识表中的每一行。主键值必须唯一且非空。
  • 数据类型 (Data Types): SQLite 是一个弱类型数据库,这意味着您可以在任何列中存储任何类型的数据。然而,它仍然有推荐的存储类:
    • NULL: 空值。
    • INTEGER: 整型值。
    • REAL: 浮点数值。
    • TEXT: 文本字符串。
    • BLOB: 二进制大对象(例如图片、文件)。

4. 命令行界面 (CLI) 使用

安装完成后,您可以通过命令行工具 sqlite3 与 SQLite 数据库进行交互。

4.1. 打开或创建数据库

要打开一个现有的数据库文件,或者如果文件不存在则创建一个新数据库:

bash
sqlite3 mydatabase.db

  • 如果 mydatabase.db 不存在,SQLite 会创建一个新的空数据库文件。
  • 如果 mydatabase.db 存在,SQLite 会打开它。
  • 要退出 SQLite 提示符,输入 .quit.exit

4.2. 常用点命令

sqlite3> 提示符下,以点 (.) 开头的命令是 SQLite 特有的元命令,而不是 SQL 语句。

  • .help: 显示所有可用的点命令。
  • .tables: 列出当前数据库中的所有表。
  • .schema [table_name]: 显示指定表的 CREATE 语句,如果不指定表名则显示所有表的 CREATE 语句。
  • .mode MODE: 设置输出模式(例如 column 用于对齐输出,csv 用于 CSV 格式)。
  • .headers on/off: 开启或关闭列标题显示。
  • .quit / .exit: 退出 SQLite 命令行工具。

示例:

sqlite
sqlite> .help
sqlite> .tables
sqlite> .schema
sqlite> .mode column
sqlite> .headers on

5. SQL 基础 (CRUD 操作)

SQL (Structured Query Language) 是用于管理关系型数据库的标准语言。CRUD 指的是创建 (Create)、读取 (Read)、更新 (Update) 和删除 (Delete) 操作。

5.1. 创建表 (CREATE TABLE)

使用 CREATE TABLE 语句定义数据库的结构。

sql
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
grade TEXT
);

  • id INTEGER PRIMARY KEY AUTOINCREMENT: 定义一个名为 id 的整型列作为主键,并自动递增。
  • name TEXT NOT NULL: 定义一个名为 name 的文本列,且不能为 NULL。
  • age INTEGER: 定义一个名为 age 的整型列。
  • grade TEXT: 定义一个名为 grade 的文本列。

在 CLI 中执行:

sqlite
sqlite> CREATE TABLE students (
...> id INTEGER PRIMARY KEY AUTOINCREMENT,
...> name TEXT NOT NULL,
...> age INTEGER,
...> grade TEXT
...> );
sqlite> .tables
students
sqlite> .schema students
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
grade TEXT
);

5.2. 插入数据 (INSERT INTO)

使用 INSERT INTO 语句向表中添加新行。

sql
INSERT INTO students (name, age, grade) VALUES ('张三', 18, '高一');
INSERT INTO students (name, age, grade) VALUES ('李四', 19, '高二');
INSERT INTO students (name, age) VALUES ('王五', 17); -- grade 默认为 NULL

5.3. 查询数据 (SELECT)

使用 SELECT 语句从表中检索数据。

“`sql
SELECT * FROM students; — 查询所有列的所有数据

SELECT name, age FROM students WHERE age > 17; — 查询姓名和年龄,条件是年龄大于17

SELECT * FROM students WHERE grade IS NULL; — 查询 grade 列为 NULL 的数据
“`

在 CLI 中执行:

“`sqlite
sqlite> INSERT INTO students (name, age, grade) VALUES (‘张三’, 18, ‘高一’);
sqlite> INSERT INTO students (name, age, grade) VALUES (‘李四’, 19, ‘高二’);
sqlite> INSERT INTO students (name, age) VALUES (‘王五’, 17);
sqlite> SELECT * FROM students;
id name age grade


1 张三 18 高一
2 李四 19 高二
3 王五 17 NULL
sqlite> SELECT name, age FROM students WHERE age > 17;
name age


张三 18
李四 19
“`

5.4. 更新数据 (UPDATE)

使用 UPDATE 语句修改表中现有行的数据。

“`sql
UPDATE students SET grade = ‘高三’ WHERE name = ‘王五’; — 将王五的 grade 更新为高三

UPDATE students SET age = 20, grade = ‘毕业班’ WHERE id = 2; — 更新 ID 为 2 的学生信息
“`

在 CLI 中执行:

“`sqlite
sqlite> UPDATE students SET grade = ‘高三’ WHERE name = ‘王五’;
sqlite> SELECT * FROM students WHERE name = ‘王五’;
id name age grade


3 王五 17 高三
“`

5.5. 删除数据 (DELETE)

使用 DELETE FROM 语句从表中删除行。

“`sql
DELETE FROM students WHERE id = 1; — 删除 ID 为 1 的学生记录

DELETE FROM students WHERE age < 18; — 删除所有年龄小于 18 的学生记录
“`

在 CLI 中执行:

“`sqlite
sqlite> DELETE FROM students WHERE id = 1;
sqlite> SELECT * FROM students;
id name age grade


2 李四 19 高二
3 王五 17 高三
“`

6. 高级主题 (简述)

  • 索引 (Indexes): 用于加快数据检索速度,尤其是在大型表中。例如:CREATE INDEX idx_name ON students (name);
  • 事务 (Transactions): 确保一系列 SQL 操作要么全部成功,要么全部失败,维护数据的一致性。例如:BEGIN TRANSACTION; ... COMMIT;ROLLBACK;
  • 外键 (Foreign Keys): 用于在两个表之间建立关联,维护引用完整性。例如,一个 orders 表可能有一个 customer_id 外键,引用 customers 表的 id
  • 与编程语言集成: SQLite 可以轻松地与各种编程语言(如 Python、Java、C#, Go 等)集成。大多数语言都提供了 SQLite 驱动或库,允许您通过编程方式执行 SQL 语句、管理数据库。

    Python 示例:

    “`python
    import sqlite3

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

    创建表

    cursor.execute(”’
    CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT NOT NULL,
    email TEXT
    )
    ”’)

    插入数据

    cursor.execute(“INSERT INTO users (username, email) VALUES (?, ?)”, (‘alice’, ‘[email protected]’))
    cursor.execute(“INSERT INTO users (username, email) VALUES (?, ?)”, (‘bob’, ‘[email protected]’))
    conn.commit() # 提交事务

    查询数据

    cursor.execute(“SELECT * FROM users”)
    rows = cursor.fetchall()
    for row in rows:
    print(row)

    conn.close() # 关闭连接
    “`

7. 结论

本指南为您提供了 SQLite 的快速入门知识,包括其概念、安装、命令行工具的使用以及核心 SQL (CRUD) 操作。SQLite 是一个功能强大且易于使用的嵌入式数据库,非常适合需要轻量级、无需配置的数据存储解决方案的应用程序。

要进一步深入学习,建议您查阅 SQLite 官方文档,并尝试在您自己的项目中使用它,探索更复杂的 SQL 查询、函数、视图、触发器等高级特性。祝您使用愉快!

滚动至顶部