SQLite 是一个轻量级的、嵌入式的数据库引擎,它将整个数据库存储在一个单一的文件中,因此特别适用于小型应用、桌面应用和移动应用。它不需要服务器支持,并且支持 SQL 标准的大部分功能。以下是 SQLite 的基本教程,帮助你快速了解 SQLite 的使用方法。


目录

  1. SQLite 安装与配置
    • SQLite 安装
    • 使用 SQLite 数据库
    • SQLite 命令行工具
  2. 创建数据库与表
    • 创建数据库
    • 创建表
    • 设置主键与唯一约束
  3. 基本 SQL 操作
    • INSERT 插入数据
    • SELECT 查询数据
    • UPDATE 更新数据
    • DELETE 删除数据
  4. 高级操作
    • 联接表(JOIN)
    • 聚合函数(COUNT, SUM, AVG 等)
    • 子查询
  5. 索引与性能优化
    • 创建索引
    • 删除索引
    • 查询性能优化
  6. 事务与并发控制
    • 使用事务
    • 锁与并发控制
  7. SQLite 与编程语言集成
    • Python 使用 SQLite
    • PHP 使用 SQLite
    • Java 使用 SQLite
  8. 参考资料与外部链接

1. SQLite 安装与配置

SQLite 安装

SQLite 作为一个轻量级数据库,并不需要像 MySQL 或 PostgreSQL 那样进行复杂的安装。通常,你只需要下载 SQLite 的命令行工具,或者使用语言自带的 SQLite 库。

  • Linux:你可以通过包管理器安装 SQLite,例如: sudo apt-get install sqlite3 sudo apt-get install libsqlite3-dev
  • Windows 和 macOS:直接从 SQLite 官方网站 下载适合的版本。

使用 SQLite 数据库

安装完 SQLite 后,可以使用 sqlite3 命令行工具进行操作:

sqlite3 my_database.db

这会打开 my_database.db 数据库文件,如果文件不存在,SQLite 会创建它。


2. 创建数据库与表

创建数据库

SQLite 会在文件系统上创建一个文件来存储数据库。如果文件不存在,SQLite 会自动创建它。例如:

sqlite3 my_database.db

创建表

使用 SQL 语句来创建表。例如,创建一个 users 表:

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

此语句会创建一个 users 表,包含 idusernameemailage 四个字段。id 字段设置为自增主键。

设置主键与唯一约束

  • 主键(PRIMARY KEY)确保字段值唯一,并且自动为其创建索引。
  • 唯一(UNIQUE)约束确保列的每个值都是唯一的。
CREATE TABLE products (
    product_id INTEGER PRIMARY KEY,
    product_name TEXT NOT NULL UNIQUE,
    price REAL
);


3. 基本 SQL 操作

插入数据(INSERT

插入一行数据:

INSERT INTO users (username, email, age) 
VALUES ('john_doe', 'john@example.com', 30);

查询数据(SELECT

查询所有用户:

SELECT * FROM users;

查询特定用户:

SELECT * FROM users WHERE username = 'john_doe';

更新数据(UPDATE

更新用户信息:

UPDATE users
SET age = 31
WHERE username = 'john_doe';

删除数据(DELETE

删除用户:

DELETE FROM users WHERE username = 'john_doe';


4. 高级操作

联接表(JOIN

联接多个表可以通过 JOIN 实现。例如,查询用户和订单的信息:

SELECT users.username, orders.order_date
FROM users
JOIN orders ON users.id = orders.user_id;

聚合函数

SQLite 支持常见的聚合函数,如 COUNTSUMAVG 等。例如,查询用户数量:

SELECT COUNT(*) FROM users;

子查询

子查询可以嵌套在其他查询中:

SELECT username
FROM users
WHERE age > (SELECT AVG(age) FROM users);


5. 索引与性能优化

创建索引

创建索引可以加速查询操作,尤其是对于大数据量的表。示例如下:

CREATE INDEX idx_users_username ON users(username);

删除索引

如果不再需要索引,可以删除它:

DROP INDEX idx_users_username;

查询性能优化

  • 确保常用查询的字段上创建索引。
  • 使用 EXPLAIN QUERY PLAN 来分析查询性能。
EXPLAIN QUERY PLAN SELECT * FROM users WHERE username = 'john_doe';


6. 事务与并发控制

使用事务

事务用于确保一组操作的原子性。示例如下:

BEGIN TRANSACTION;

INSERT INTO users (username, email, age) 
VALUES ('new_user', 'new_user@example.com', 25);

UPDATE users SET age = 26 WHERE username = 'new_user';

COMMIT;

锁与并发控制

SQLite 是一个单进程数据库,但它也支持基本的并发控制。对于复杂的并发需求,考虑使用更强大的数据库系统。


7. SQLite 与编程语言集成

Python 使用 SQLite

Python 的 sqlite3 库可以轻松与 SQLite 集成:

import sqlite3

# 连接到 SQLite 数据库
conn = sqlite3.connect('my_database.db')

# 创建一个 cursor 对象
cursor = conn.cursor()

# 执行 SQL 查询
cursor.execute("SELECT * FROM users")

# 获取所有结果
rows = cursor.fetchall()
for row in rows:
    print(row)

# 关闭连接
conn.close()

PHP 使用 SQLite

PHP 也支持 SQLite,通常使用 PDO 扩展:

<?php
try {
    $pdo = new PDO('sqlite:my_database.db');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 执行查询
    $stmt = $pdo->query("SELECT * FROM users");

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['username'] . "\n";
    }
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}
?>

Java 使用 SQLite

Java 可以通过 JDBC 和 SQLite 进行集成,使用 sqlite-jdbc 库:

import java.sql.*;

public class SQLiteExample {
    public static void main(String[] args) {
        try (Connection conn = DriverManager.getConnection("jdbc:sqlite:my_database.db")) {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM users");

            while (rs.next()) {
                System.out.println(rs.getString("username"));
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
    }
}


8. 参考资料与外部链接


这个教程概述了 SQLite 的基本操作。如果你有更具体的问题或需要详细的示例,随时可以问!