Tous les produits
Search
Centre de documentation

Tablestore:Use conditional updates

Dernière mise à jour :Aug 18, 2026

Utilisez le SDK Tablestore pour Go afin de spécifier des conditions pour l'écriture, la mise à jour ou la suppression d'une ligne. L'opération n'est exécutée que si la ligne cible respecte ces conditions.

Prérequis

Installez le SDK Tablestore pour Go et initialisez le client.

Description

Une mise à jour conditionnelle peut inclure une condition d'existence de ligne, une condition de colonne, ou les deux. Appelez les méthodes SetCondition et SetColumnCondition sur les objets PutRowChange, UpdateRowChange ou DeleteRowChange. Vous pouvez également ajouter ces objets de modification de ligne à une requête BatchWriteRow. Si les conditions ne sont pas remplies, le serveur renvoie une erreur et ne modifie pas les données.

  • Une condition d'existence de ligne vérifie si la ligne cible existe. Vous pouvez ignorer l'existence de la ligne, exiger que la ligne existe ou exiger que la ligne n'existe pas.

  • Une condition de colonne compare la valeur d'une colonne ou combine plusieurs conditions de colonne à l'aide d'opérateurs logiques. Les comparaisons entre colonnes ou entre constantes ne sont pas prises en charge. Une mise à jour peut contenir jusqu'à 10 conditions de colonne.

L'exemple suivant met à jour la colonne status uniquement si la ligne cible existe et si la valeur de la colonne score est égale à 30.

primaryKey := &tablestore.PrimaryKey{}
primaryKey.AddPrimaryKeyColumn("id", "row1")

change := &tablestore.UpdateRowChange{
    TableName:  "example_table",
    PrimaryKey: primaryKey,
}
change.PutColumn("status", "processed")
change.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
change.SetColumnCondition(
    tablestore.NewSingleColumnCondition("score", tablestore.CT_EQUAL, int64(30)),
)

_, err := client.UpdateRow(&tablestore.UpdateRowRequest{UpdateRowChange: change})
if err != nil {
    log.Fatal(err)
}

Paramètres

Condition d'existence de ligne

Appelez la méthode SetCondition pour spécifier une valeur RowExistenceExpectation.

Nom

Type

Description

expectation (obligatoire)

RowExistenceExpectation

La condition d'existence de la ligne. Valeurs possibles : RowExistenceExpectation_IGNORE (ne vérifie pas si la ligne existe), RowExistenceExpectation_EXPECT_EXIST (exige que la ligne existe) et RowExistenceExpectation_EXPECT_NOT_EXIST (exige que la ligne n'existe pas).

Condition sur une seule colonne

Appelez la méthode NewSingleColumnCondition(columnName, comparator, value) pour créer une condition sur une seule colonne. L'objet SingleColumnCondition contient les paramètres suivants.

Nom

Type

Description

ColumnName (obligatoire)

*string

La colonne à évaluer.

Comparator (obligatoire)

*ComparatorType

L'opérateur de comparaison. Valeurs possibles : CT_EQUAL, CT_NOT_EQUAL, CT_GREATER_THAN, CT_GREATER_EQUAL, CT_LESS_THAN et CT_LESS_EQUAL.

ColumnValue (obligatoire)

interface{}

La valeur constante à comparer.

FilterIfMissing (facultatif)

bool

Indique si la condition n'est pas remplie lorsque la ligne ne contient pas la colonne. Valeur par défaut : false (la condition est considérée comme remplie).

LatestVersionOnly (facultatif)

bool

Indique s'il faut évaluer uniquement la dernière version. Valeur par défaut : false (la condition est remplie si au moins une version la satisfait).

Condition composite

Appelez la méthode NewCompositeColumnCondition(lo) pour créer une condition composite, puis appelez AddFilter pour ajouter des sous-conditions. Une sous-condition peut être une condition sur une seule colonne ou une condition composite imbriquée. L'objet CompositeColumnValueFilter contient les paramètres suivants.

Nom

Type

Description

Operator (obligatoire)

LogicalOperator

L'opérateur logique. Les opérateurs LO_AND et LO_OR nécessitent au moins deux sous-conditions. L'opérateur LO_NOT n'accepte qu'une seule sous-condition.

Filters (obligatoire)

[]ColumnFilter

Les sous-conditions à combiner.

Exemples

Mettre à jour des données à l'aide d'une condition composite

L'exemple suivant effectue une mise à jour uniquement si score >= 60 et si status est égal à pending.

condition := tablestore.NewCompositeColumnCondition(tablestore.LO_AND)
condition.AddFilter(
    tablestore.NewSingleColumnCondition("score", tablestore.CT_GREATER_EQUAL, int64(60)),
)
condition.AddFilter(
    tablestore.NewSingleColumnCondition("status", tablestore.CT_EQUAL, "pending"),
)

change.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
change.SetColumnCondition(condition)