条件更新是指只有在满足条件时才对表中的数据进行更改,当不满足条件时更新失败。条件更新可用于put_row、update_row、delete_row和batch_write_row等操作。

参数说明

条件更新的判断条件包括行存在性条件和列条件。
  • 行存在性条件包含:
    • IGNORE:忽略
    • EXPECT_EXIST:期望存在
    • EXPECT_NOT_EXIST:期望不存在
    说明 在对表进行更改操作时,会首先检查行存在性条件。若不满足行存在性条件,则更改失败,出现报错。
  • 列条件基于某一列或者某些列的列值进行条件判断,与过滤器中的条件类似。列条件包含:
    • SingleColumnCondition:单列条件
    • CompositeColumnCondition:组合列条件

基于条件更新可以实现乐观锁的功能,即在更新某行时,先获取某列的值。假设为列 A,值为 1,然后设置条件“列 A=1”,更新该行同时使“列 A=2”。若更新失败,代表有其他客户端已经成功更新了该行。

示例

根据指定主键更新一行,同时满足以下条件更新成功;否则失败。
  • 指定的行存在
  • 列”name“值为”john“,列”addr“值为”china“
   var params = {
    tableName: "sampleTable",
    primaryKey: [{ 'gid': Long.fromNumber(20013) }, { 'uid': Long.fromNumber(20013) }],
    updateOfAttributeColumns: [{ 'PUT': [{ 'col1': 'test6' }] }]
};

//指定条件。期望行存在,并且name=john,addr=china。
var condition = new TableStore.CompositeCondition(TableStore.LogicalOperator.AND);
condition.addSubCondition(new TableStore.SingleColumnCondition('name', 'john', TableStore.ComparatorType.EQUAL));
condition.addSubCondition(new TableStore.SingleColumnCondition('addr', 'china', TableStore.ComparatorType.EQUAL));

params.condition = new TableStore.Condition(TableStore.RowExistenceExpectation.EXPECT_EXIST, condition);

client.updateRow(params,
    function (err, data) {
        if (err) {
            console.log('error:', err);
            return;
        }
        console.log('success:', data);
    });