03-第3章-基础CRUD操作

第 3 章:基础 CRUD 操作


3.1 完整的可运行示例

让我们通过一个完整的示例来演示 sfsDb 的基础 CRUD 操作:

go 复制代码
package main

import (
	"fmt"
	"os"

	"github.com/liaoran123/sfsDb/engine"
	"github.com/liaoran123/sfsDb/storage"
)

func main() {
	fmt.Println("=== sfsDb 数据库实战 - 第 3 章:基础 CRUD 操作示例 ===")
	fmt.Println()

	dbPath := "./bible_examples_chapter03_db"
	cleanup(dbPath)

	fmt.Println("1. 初始化数据库")
	_, err := storage.GetDBManager().OpenDB(dbPath)
	if err != nil {
		fmt.Printf("数据库打开失败: %v\n", err)
		return
	}
	defer storage.GetDBManager().CloseDB()
	fmt.Println("   ✓ 数据库打开成功")
	fmt.Println()

	fmt.Println("2. 创建表并设置字段")
	table, err := engine.NewTable("employees")
	if err != nil {
		fmt.Printf("创建表失败: %v\n", err)
		return
	}

	fields := map[string]any{
		"id":     0,
		"name":   "",
		"age":    0,
		"department": "",
		"salary": 0,
	}
	err = table.SetFields(fields)
	if err != nil {
		fmt.Printf("设置字段失败: %v\n", err)
		return
	}

	primaryKey, err := engine.NewDefaultPrimaryKey("pk_id")
	primaryKey.AddFields("id")
	table.CreateIndex(primaryKey)
	fmt.Println("   ✓ 表创建成功")
	fmt.Println()

	fmt.Println("3. 插入数据 (Create)")
	employees := []map[string]any{
		{"id": 1, "name": "张三", "age": 28, "department": "技术部", "salary": 15000},
		{"id": 2, "name": "李四", "age": 32, "department": "市场部", "salary": 12000},
		{"id": 3, "name": "王五", "age": 25, "department": "技术部", "salary": 13000},
	}

	for _, emp := range employees {
		_, err = table.Insert(&emp)
		if err != nil {
			fmt.Printf("插入数据失败: %v\n", err)
			return
		}
	}
	fmt.Println("   ✓ 成功插入", len(employees), "条员工数据")
	fmt.Println()

	fmt.Println("4. 查询数据 (Read)")
	searchAll := map[string]any{"id": nil}
	dataIter, _ := table.Search(&searchAll)
	defer dataIter.Release()
	
	records := dataIter.GetRecords(true)
	defer records.Release()
	
	fmt.Println("   所有员工列表:")
	for _, emp := range records {
		fmt.Printf("   - ID: %v, 姓名: %v, 年龄: %v, 部门: %v, 薪资: %v\n",
			emp["id"], emp["name"], emp["age"], emp["department"], emp["salary"])
	}
	fmt.Println()

	fmt.Println("5. 更新数据 (Update)")
	updateEmp := map[string]any{
		"id":     1,
		"salary": 18000,
	}
	err = table.Update(&updateEmp)
	if err != nil {
		fmt.Printf("更新数据失败: %v\n", err)
		return
	}
	fmt.Println("   ✓ 成功更新员工 ID=1 的薪资")
	
	searchEmp := map[string]any{"id": 1}
	dataIter2, _ := table.Search(&searchEmp)
	defer dataIter2.Release()
	updatedRecord := dataIter2.GetRecords(true)
	defer updatedRecord.Release()
	fmt.Printf("   更新后的数据: %+v\n", updatedRecord[0])
	fmt.Println()

	fmt.Println("6. 删除数据 (Delete)")
	deleteEmp := map[string]any{"id": 3}
	err = table.Delete(&deleteEmp)
	if err != nil {
		fmt.Printf("删除数据失败: %v\n", err)
		return
	}
	fmt.Println("   ✓ 成功删除员工 ID=3")
	
	dataIter3, _ := table.Search(&searchAll)
	defer dataIter3.Release()
	finalRecords := dataIter3.GetRecords(true)
	defer finalRecords.Release()
	fmt.Println("   删除后的员工列表:")
	for _, emp := range finalRecords {
		fmt.Printf("   - ID: %v, 姓名: %v\n", emp["id"], emp["name"])
	}
	fmt.Println()

	fmt.Println("=== CRUD 操作演示完成!===")
}

func cleanup(path string) {
	os.RemoveAll(path)
}

这段代码展示了 sfsDb 的完整 CRUD 操作流程:

  1. 初始化数据库 :通过 storage.GetDBManager().OpenDB() 打开数据库
  2. 创建表 :使用 engine.NewTable() 创建表
  3. 设置字段 :通过 SetFields() 定义表结构
  4. 创建索引 :使用 CreateIndex() 创建主键索引
  5. 插入数据 :使用 Insert() 插入多条员工数据
  6. 查询数据 :使用 Search() 查询所有记录
  7. 更新数据 :使用 Update() 更新指定记录
  8. 删除数据 :使用 Delete() 删除指定记录

3.2 小结

本章我们通过项目的实际代码学习了 sfsDb 的基础 CRUD 操作:

  • 创建表 :使用 NewTable()SetFields()
  • 插入数据 :使用 Insert(),支持自动递增 ID
  • 查询数据 :使用 Search()ForData()
  • 更新数据 :使用 Update(),通过主键定位
  • 删除数据 :使用 Delete(),通过主键删除
  • 资源管理:及时释放迭代器和记录

在下一章中,我们将深入学习索引与查询优化。


本书版本 :1.0.0
最后更新 :2026-03-11
sfsDb - 以工业物联网边缘计算为核心场景的高性能嵌入式数据库!🚀
技术栈 - Go、leveldb。纯golang实现。
项目地址GitHub
GitCode 镜像GitCode

相关推荐
三万棵雪松2 小时前
【Linux 物联网网关主控系统-Web部分(四)】
linux·前端·物联网·嵌入式linux
EmbeddedCore2 小时前
物联网通讯协议怎么选?MQTT、TCP、UDP、HTTP、HTTPS全面解析
物联网·tcp/ip·http
清水白石0082 小时前
《从缓存到数据库:一致性之痛与工程之道》
数据库·python·缓存
拾光向日葵2 小时前
天府新区通用航空职业学院2026年全新开设宠物医疗技术专业
大数据·人工智能·物联网
cTz6FE7gA2 小时前
Oracle RMAN物理备份Web系统
数据库·oracle
APguantou3 小时前
NCRE-三级数据库技术-第14章-数据仓库与数据挖掘
数据库·数据仓库·数据挖掘
刘~浪地球4 小时前
Redis 从入门到精通(十):管道技术
数据库·redis·缓存
fzb5QsS1p7 小时前
MySQL 事务的二阶段提交是什么?
数据库·mysql
清风徐来QCQ10 小时前
Lombok/SSM/devTools
数据库