表格存储提供了DeleteRow接口用于删除单行数据以及BatchWriteRow接口用于批量删除数据。

重要 删除表数据,将导致数据不可恢复,请谨慎操作。

前提条件

  • 已初始化Client,详情请参见初始化
  • 已创建数据表并写入数据。

删除单行数据

调用DeleteRow接口删除一行数据。如果删除的行不存在,则不会发生任何变化。

接口

// 删除表中的一行。
// @param DeleteRowRequest           执行DeleteRow操作所需参数的封装。
// @return DeleteRowResponse         DeleteRow操作的响应内容。
DeleteRow(request *DeleteRowRequest) (*DeleteRowResponse, error)                   

参数

参数说明
TableName数据表名称。
PrimaryKey行的主键。
说明 设置的主键个数和类型必须和数据表的主键个数和类型一致。
Condition支持使用条件更新,可以设置原行的存在性条件或者原行中某列的列值条件。更多信息,请参见条件更新

示例

删除一行数据。

deleteRowReq := new(tablestore.DeleteRowRequest)
deleteRowReq.DeleteRowChange = new(tablestore.DeleteRowChange)
deleteRowReq.DeleteRowChange.TableName = tableName
deletePk := new(tablestore.PrimaryKey)
deletePk.AddPrimaryKeyColumn("pk1", "pk1value1")
deletePk.AddPrimaryKeyColumn("pk2", int64(2))
deletePk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
deleteRowReq.DeleteRowChange.PrimaryKey = deletePk
deleteRowReq.DeleteRowChange.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
clCondition1 := tablestore.NewSingleColumnCondition("col2", tablestore.CT_EQUAL, int64(3))
deleteRowReq.DeleteRowChange.SetColumnCondition(clCondition1)
_, err := client.DeleteRow(deleteRowReq)
if err != nil {
    fmt.Println("delete failed with error:", err)
} else {
    fmt.Println("delete row finished")
}                    

详细代码请参见DeleteRow@GitHub

批量删除数据

  1. 根据实际选择合适的方式查询待删除数据的主键信息。
    • 如果要删除指定主键范围内的数据,请调用GetRange接口,查询指定主键范围内的数据,并获取待删除数据的主键信息。具体操作,请参见范围读取数据
    • 如果要删除满足指定条件的数据,请创建多元索引后,使用多元索引查询满足指定条件的数据,并获取待删除数据的主键信息。具体操作,请参见创建多元索引使用SDK
  2. 调用BatchWriteRow接口,根据主键信息批量删除数据。更多信息,请参见批量写入数据