Todos os produtos
Search
Central de documentação

Tablestore:Configurar atualização condicional

Última atualização: Jun 23, 2026

Você pode usar o recurso de atualização condicional para atualizar dados em uma tabela de dados somente se as condições especificadas forem atendidas. Se as condições não forem atendidas, a atualização falhará.

Pré-requisitos

Observações de uso

Ao chamar a operação PutRow, UpdateRow, DeleteRow ou BatchWriteRow para atualizar dados, você pode usar a atualização condicional para verificar condições de existência de linha e condições baseadas em colunas. A atualização será bem-sucedida somente se as condições forem atendidas.

A atualização condicional pode ser realizada com base em condições de existência de linha e condições baseadas em colunas.

  • As condições de existência de linha incluem IGNORE, EXPECT_EXIST e EXPECT_NOT_EXIST.

    Ao modificar uma tabela de dados, o Tablestore verifica primeiro a condição de existência de linha. Se a condição de existência de linha não for atendida, a modificação falhará e um erro será retornado.

  • As condições baseadas em colunas incluem SingleColumnCondition e CompositeCondition, que são usadas para determinar se as condições são atendidas com base nos valores de uma ou mais colunas.

    As condições baseadas em colunas oferecem suporte aos seguintes operadores relacionais: =, !=, >, >=, < e <=. As condições baseadas em colunas também oferecem suporte aos seguintes operadores lógicos: NOT, AND e OR. Você pode especificar até 10 condições baseadas em colunas para uma atualização condicional.

    • SingleColumnCondition oferece suporte à comparação entre uma constante e uma coluna. A coluna pode ser uma coluna de chave primária. SingleColumnCondition não oferece suporte à comparação entre duas colunas ou duas constantes.

    • Os operadores lógicos são usados para combinar subcondições em CompositeCondition. As subcondições podem ser SingleColumnCondition ou CompositeCondition.

Você pode usar a atualização condicional para realizar bloqueio otimista. Ao atualizar uma linha, você deve obter o valor de uma coluna específica e especificar uma condição de atualização de linha com base no valor da coluna. Por exemplo, ao atualizar o valor da Coluna A em uma linha para 2, você deve obter o valor da Coluna A. Neste exemplo, o valor obtido é 1. Em seguida, você deve especificar que a linha só pode ser atualizada se o valor da Coluna A for 1. Se a condição especificada for atendida, a atualização será bem-sucedida. Se a linha for atualizada por outro cliente, a atualização falhará.

Parâmetros

Parâmetro

Descrição

RowExistenceExpectation

A condição de existência de linha. Ao modificar uma tabela, o Tablestore verifica a condição de existência de linha. Se a condição de existência de linha não for atendida, a modificação falhará e um erro será retornado.

As condições de existência de linha incluem IGNORE, EXPECT_EXIST e EXPECT_NOT_EXIST. No Tablestore, RowExistenceExpectation_IGNORE é usado para especificar IGNORE, RowExistenceExpectation_EXPECT_EXIST é usado para especificar EXPECT_EXIST e RowExistenceExpectation_EXPECT_NOT_EXIST é usado para especificar EXPECT_NOT_EXIST.

  • IGNORE: nenhuma verificação de existência é realizada.

  • EXPECT_EXIST: espera-se que a linha exista. Se a linha existir, a condição será atendida. Se a linha não existir, a condição não será atendida.

  • EXPECT_NOT_EXIST: espera-se que a linha não exista. Se a linha não existir, a condição será atendida. Se a linha existir, a condição não será atendida.

columnName

O nome da coluna.

columnValue

O valor de comparação da coluna.

comparator

O operador relacional usado para comparar o valor da coluna. Para informações sobre os tipos de operadores relacionais, consulte ComparatorType.

Os operadores relacionais incluem EQUAL(=), NOT_EQUAL(!=), GREATER_THAN(>), GREATER_EQUAL(>=), LESS_THAN(<) e LESS_EQUAL(<=). No Tablestore, CT_EQUAL é usado para especificar EQUAL(=), CT_NOT_EQUAL é usado para especificar NOT_EQUAL(!=), CT_GREATER_THAN é usado para especificar GREATER_THAN(>), CT_GREATER_EQUAL é usado para especificar GREATER_EQUAL(>=), CT_LESS_THAN é usado para especificar LESS_THAN(<) e CT_LESS_EQUAL é usado para especificar LESS_EQUAL(<=).

combinator

O operador lógico que combina várias condições. Para informações sobre os tipos de operadores lógicos, consulte LogicalOperator.

Os operadores lógicos incluem NOT, AND e OR. No Tablestore, LO_NOT é usado para especificar NOT, LO_AND é usado para especificar AND e LO_OR é usado para especificar OR.

O número de subcondições que você pode especificar varia com base no operador lógico que você usa.

  • Se o operador lógico for NOT, você poderá especificar somente uma subcondição.

  • Se o operador lógico for AND ou OR, você deverá especificar pelo menos duas subcondições.

passIfMissing

Especifica se a verificação condicional será aprovada quando uma coluna não existir em uma linha. O valor desse parâmetro é do tipo booleano. O valor padrão é true, que especifica que, se a coluna não existir em uma linha, a verificação condicional será aprovada e a linha atenderá às condições de atualização.

Se você definir o parâmetro passIfMissing como false e a coluna não existir em uma linha, a verificação condicional falhará e a linha não atenderá às condições de atualização.

latestVersionOnly

Especifica se apenas a versão mais recente do valor será usada para comparação quando uma coluna tiver várias versões de valores. O valor desse parâmetro é do tipo booleano. O valor padrão é true, que especifica que, se a coluna tiver várias versões de valores, somente a versão mais recente do valor será usada para comparação.

Se você definir o parâmetro latestVersionOnly como false e a coluna tiver várias versões de valores, todas as versões de valores serão usadas para comparação. Nesse caso, se pelo menos uma versão atender à condição, a verificação condicional será aprovada e a linha atenderá às condições de atualização.

Exemplos

Atualize uma linha com base na chave primária especificada. Se a linha especificada existir, o valor da coluna "name" for "john" e o valor da coluna "addr" for "china", a atualização será bem-sucedida. Caso contrário, a atualização falhará.

   var params = {
    tableName: "sampleTable",
    primaryKey: [{ 'gid': Long.fromNumber(20013) }, { 'uid': Long.fromNumber(20013) }],
    updateOfAttributeColumns: [{ 'PUT': [{ 'col1': 'test6' }] }]
};

// Specify the update conditions. Specify that data can be updated only if the following conditions are met: the specified row exists, the value of the "name" column is "john", and the value of the "addr" column is "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);
    });