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

参数说明

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

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

示例

根据指定主键更新一行,同时满足以下条件更新成功;否则失败。
  • 指定的行存在
  • 列“age”为20
    primary_key = [('gid',1), ('uid',"101")]
    update_of_attribute_columns = {
        'PUT' : [('name','David'), ('address','Hongkong')],
        'DELETE' : [('address', None, 1488436949003)],
        'DELETE_ALL' : [('mobile'), ('age')],
        'INCREMENT' : [('counter', -1)]
    }
    row = Row(primary_key, update_of_attribute_columns)

    # 指定Condition:必须同时满足以下2个条件,才能更新成功;否则失败
    #    (1)指定的行存在
    #    (2)“age”列值为20 
    condition = Condition(RowExistenceExpectation.EXPECT_EXIST, SingleColumnCondition("age", 20, ComparatorType.EQUAL)) # update row only when this row is exist
    consumed, return_row = client.update_row(table_name, row, condition)