SQLite入门

嵌入式轻量级数据库,不需要安装服务器,数据存在一个 .db 文件中,适合移动端、桌面端、边缘设备。

三个特性:

  1. 无类型(但推荐写类型)
    SQLite 允许你 INSERT 字符串到 INTEGER 列,但不要依赖这个。
  2. 支持大部分标准SQL
    SELECT/INSERT/UPDATE/DELETE 都一样。
  3. 自带命令行工具
    可以直接 sqlite3 test.db 操作。

基础SQL语句

-- 查
SELECT * FROM users WHERE age > 18;

-- 增
INSERT INTO users (name, age) VALUES ('lyo', 23);

-- 改
UPDATE users SET age = 24 WHERE name = 'lyo';

-- 删
DELETE FROM users WHERE age < 18;

多表联查:JOIN 就是把多张表按某一列拼成一张大表的操作。

用户表                    订单表
user_id | name           user_id | order_amount
1       | 张三           1       | 100
2       | 李四           3       | 200
SELECT *
FROM 用户表
INNER JOIN 订单表 ON 用户表.user_id = 订单表.user_id;

inner join和left join的区别:

  • inner:只保留两边都匹配的
  • left:保留左表所有行,右边没有就填 NULL

在C#中:

通常通过 System.Data.SQLite 或 Microsoft.Data.Sqlite 库。步骤是:

  1. 创建连接:new SqliteConnection("Data Source=app.db")
  2. 打开连接
  3. 执行 SQL(ExecuteNonQuery 或 ExecuteReader)
  4. 关闭连接。
// 1. 创建并打开数据库连接
// using: 作用域结束后自动释放资源(关闭连接),不用手动 conn.Close()
// SqliteConnection: 表示与 SQLite 数据库的连接
// "Data Source=test.db": 指定数据库文件为当前目录下的 test.db(不存在会自动创建)
using var conn = new SqliteConnection("Data Source=test.db");

// 2. 打开连接(此时才真正与数据库文件建立通信)
conn.Open();

// 3. 创建一个命令对象(代表一条要执行的 SQL 语句)
var cmd = conn.CreateCommand();

// 4. 设置要执行的 SQL 命令文本
// 这里是从 users 表中查询所有列的所有行
cmd.CommandText = "SELECT * FROM users";

// 5. 执行查询,并返回一个只读的“数据读取器”
// using: 同样自动释放 reader
// ExecuteReader: 适用于 SELECT 查询,返回多行结果
using var reader = cmd.ExecuteReader();

// 6. 逐行读取结果
// reader.Read(): 每调用一次,移动到下一行;有数据返回 true,没有返回 false
while (reader.Read())
{
    // 7. 获取当前行第 0 列的值(即第一列),并转为字符串输出
    // GetString(0): 按列索引获取,索引从 0 开始
    // 注意:如果这一列不是字符串类型或值为 NULL,会报错
    Console.WriteLine(reader.GetString(0));
}

ExecuteReader用于SELECT查询,ExecuteNonQuery用于INSERT / UPDATE / DELETE

另外:sqlite不适合高并发web后端。因为 SQLite 在写入时会锁住整个数据库,一次只能有一个写入操作,不适合高并发场景。高并发 Web 应用一般用 MySQL 或 PostgreSQL。

posted @ 2026-04-09 11:21  hélium  阅读(29)  评论(0)    收藏  举报