0204: CRUD
添加 CRUD 接口
这一步实现基于主键的查、改、增、删,也是就是 CRUD(create,read,update,delete)。
type DB struct {
KV KV
}
func (db *DB) Open() error { return db.KV.Open() }
func (db *DB) Close() error { return db.KV.Close() }用 KV 的 get、set、del 实现这些函数:
func (db *DB) Select(schema *Schema, row Row) (ok bool, err error)
func (db *DB) Insert(schema *Schema, row Row) (updated bool, err error)
func (db *DB) Upsert(schema *Schema, row Row) (updated bool, err error)
func (db *DB) Update(schema *Schema, row Row) (updated bool, err error)
func (db *DB) Delete(schema *Schema, row Row) (deleted bool, err error)要求:
- select、delete 输入 row 里的主键。
- insert、upsert、update 输入完整的 row。
比如 insert 的实现是:
func (db *DB) Insert(schema *Schema, row Row) (updated bool, err error) {
key := row.EncodeKey(schema)
val := row.EncodeVal(schema)
return db.KV.SetEx(key, val, ModeInsert)
}再比如这个表 create table t (a int64, b int64, primary key (b)), Select() 输入一个长度为2的 Row,第2列是主键,第1列是要从 KV 里返回的 V。
关系型数据库主要功能
除了通过主键来操作单个 row,后续还会实现其他主要功能:
- 遍历全表。
- 通过索引来查询。
- 通过索引或主键来查询某个范围内的所有 row。
- 过滤查询结果。