Todos os produtos
Search
Central de documentação

Tablestore:Executar atualizações condicionais

Última atualização: Aug 13, 2026

O recurso de atualização condicional permite atualizar dados em uma tabela apenas se as condições especificadas forem atendidas. Caso contrário, a atualização falha.

Pré-requisitos

Observações de uso

Ao chamar a operação PutRow, UpdateRow, DeleteRow ou BatchWriteRow para atualizar dados em uma tabela, especifique condições de existência de linha e condições baseadas em colunas para executar atualizações condicionais. O Tablestore atualiza os dados da tabela somente quando essas condições são satisfeitas.

As atualizações condicionais podem basear-se em condições de existência de linha e em condições baseadas em colunas.

  • Condições de existência de linha compatíveis: IGNORE, EXPECT_EXIST e EXPECT_NOT_EXIST.

    Durante a atualização de uma tabela, o Tablestore verifica primeiro se as condições de existência de linha são atendidas. Se não forem, a atualização falha e o sistema retorna um erro.

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

    Essas condições aceitam os seguintes operadores relacionais: =, !=, >, >=, < e <=. Também aceitam os operadores lógicos NOT, AND e OR. É possível definir até 10 condições baseadas em colunas para uma atualização condicional.

    • RelationalCondition compara uma coluna com uma constante. Não há suporte para comparação entre duas colunas ou duas constantes.

    • CompositeCondition consiste em múltiplas RelationalConditions ou CompositeConditions. Defina as relações lógicas entre as subcondições.

Utilize atualizações condicionais para implementar bloqueio otimista. Ao atualizar uma linha, obtenha o valor de uma coluna específica e defina uma condição de atualização baseada nesse valor. Por exemplo, ao alterar o valor da Coluna A para 2, obtenha seu valor atual (neste caso, 1) e especifique que a atualização só deve ocorrer se o valor da Coluna A for igual a 1. Se a condição for atendida, a atualização será bem-sucedida. Caso outro cliente tenha atualizado a linha, a operação falhará.

Parâmetros

Parâmetro

Descrição

RowExistenceExpectation

Durante a atualização de uma tabela, o Tablestore verifica primeiro se as condições de existência de linha são atendidas. Se não forem, a atualização falha e o sistema retorna um erro.

Condições de existência de linha compatíveis: IGNORE, EXPECT_EXIST e EXPECT_NOT_EXIST.

  • IGNORE: Ignora a existência da linha. Nenhuma verificação de existência é executada.

  • EXPECT_EXIST: Espera-se que a linha exista. A condição é atendida se a linha existir.

  • EXPECT_NOT_EXIST: Espera-se que a linha não exista. A condição é atendida se a linha não existir.

ColumnName

Nome da coluna.

ColumnValue

Valor a ser comparado com a coluna.

Operator

Operador relacional usado para comparar valores. Para mais informações, consulte ComparatorType.

Operadores relacionais compatíveis: =, !=, >, >=, < e <=.

LogicOperator

Operador lógico utilizado para combinar múltiplas condições. Para mais informações, consulte LogicalOperator.

Operadores lógicos compatíveis: NOT, AND e OR.

A quantidade de subcondições necessárias varia conforme o operador lógico.

  • Para o operador NOT, adicione apenas uma subcondição.

  • Para os operadores AND ou OR, adicione pelo menos duas subcondições.

PassIfMissing

Define se a verificação condicional é aprovada quando uma coluna não existe na linha. Este parâmetro é do tipo Boolean. O valor padrão é true, indicando que, se a coluna não existir, a verificação condicional é aprovada e a linha atende às condições de atualização.

Se PassIfMissing estiver definido como false, a verificação condicional falhará quando a coluna não existir na linha.

LatestVersionsOnly

Indica se apenas o valor da versão mais recente deve ser usado quando a coluna possuir múltiplas versões. Este parâmetro é do tipo Boolean. O valor padrão é true, o que significa que, havendo várias versões, somente a mais recente será usada na comparação.

Caso LatestVersionsOnly esteja definido como false e a coluna tenha múltiplas versões, todas serão consideradas na comparação. Nesse cenário, a verificação condicional será aprovada se qualquer uma das versões atender à condição.

Exemplo

O código abaixo demonstra como atualizar dados com base em condições de coluna. A atualização ocorre apenas se o valor da coluna col0 for igual a 5; caso contrário, a operação falha.

    // Specify the primary key of the row. The primary key must be the same as the primary key that is specified in TableMeta when the table is created. 
    PrimaryKey primaryKey = new PrimaryKey();
    primaryKey.Add("pk0", new ColumnValue(0));
    primaryKey.Add("pk1", new ColumnValue("abc"));

    // Specify the attribute columns of the row. 
    AttributeColumns attribute = new AttributeColumns();
    attribute.Add("col0", new ColumnValue(0));
    attribute.Add("col1", new ColumnValue("a"));
    attribute.Add("col2", new ColumnValue(true));

    PutRowRequest request = new PutRowRequest(tableName, new Condition(RowExistenceExpectation.IGNORE), primaryKey, attribute);

    // Call the PutRow operation when other conditions are not configured The operation is expected to succeed. 
    try
    {
        otsClient.PutRow(request);

        Console.WriteLine("Put row succeeded.");
    } catch (Exception ex)
    {
        Console.WriteLine("Put row failed. error:{0}", ex.Message);
    }

    // If the value of the col0 column is not equal to 5, call the PutRow operation again to overwrite the original value. The operation is expected to succeed. 
    try
    {
        request.Condition.ColumnCondition = new RelationalCondition("col0",
                                            CompareOperator.NOT_EQUAL,
                                            new ColumnValue(5));
        otsClient.PutRow(request);

        Console.WriteLine("Put row succeeded.");
    } catch (Exception ex)
    {
        Console.WriteLine("Put row failed. error:{0}", ex.Message);
    }

    // If the value of the col0 column is equal to 5, call the PutRow operation again to overwrite the original value. The operation is expected to succeed. 
    try
    {
        // Add a new condition that the value of the col0 column is equal to 5. 
        request.Condition.ColumnCondition = new RelationalCondition("col0",
                                            CompareOperator.EQUAL,
                                            new ColumnValue(5));
        otsClient.PutRow(request);

        Console.WriteLine("Put row succeeded.");
    }
    catch (OTSServerException)
    {
        // OTSServerException is returned because the condition is not met. 
        Console.WriteLine("Put row failed  because condition check failed. but expected");
    }
    catch (Exception ex)
    {
        Console.WriteLine("Put row failed. error:{0}", ex.Message);
    }