Transaction request cannot include multiple operations on one item

TL;DR — Deux actions dans le même appel TransactWriteItems ciblent le même élément (même clé primaire). DynamoDB exige que chaque élément d'une transaction soit unique, donc il rejette l'appel entier avant d'en exécuter la moindre partie. Fusionne les actions en double en une seule, ou déplace l'une d'elles vers une écriture séparée.

Ce que ça signifie

ValidationException: Transaction request cannot include multiple operations on one item

Une requête TransactWriteItems regroupe jusqu'à 100 actions (Put, Update, Delete, ConditionCheck) qui commitent toutes ou échouent toutes. Une règle stricte de cette API est qu'aucune paire d'actions ne peut cibler le même élément — DynamoDB identifie un élément par sa clé primaire complète, et chaque clé ne peut apparaître au plus qu'une fois. C'est une ValidationException HTTP 400, détectée avant l'exécution de la transaction, et elle n'est pas réessayable telle quelle.

Pourquoi ça arrive

  • Un ConditionCheck plus une écriture sur la même clé — tu as essayé d'affirmer une condition sur un élément et aussi de l'Update/Delete dans la même transaction. Intègre plutôt la condition dans la ConditionExpression de l'écriture.
  • Deux écritures sur la même clé — par exemple un Put et un Update pour le même élément, souvent issus d'une boucle qui ne déduplique pas par clé.
  • Un lot généré avec des clés en double — un ORM ou une couche de mapping a émis deux fois la même clé de partition + clé de tri.
  • La même clé dans deux actions différentes sur des tables que tu crois différentes — l'élément est identifié de façon unique par {table, PK, SK} ; une répétition au sein de la même table le déclenche.

Comment le corriger

  1. Déduplique par clé primaire avant de construire la transaction — chaque {PK, SK} ne peut apparaître qu'une fois.
  2. Fusionne un ConditionCheck dans l'écriture qu'il protège : mets l'assertion dans la propre ConditionExpression de cet élément plutôt que d'ajouter une action ConditionCheck séparée.
  3. Combine deux mutations en un seul Update à l'aide d'une seule UpdateExpression (SET/ADD/REMOVE) au lieu de deux actions.
  4. Sépare la logique multi-étapes inévitable en transactions ou écritures distinctes si les opérations ne peuvent vraiment pas s'exprimer en une seule action.

Composer des transactions multi-éléments à la main, c'est là que les clés en double se glissent. L'application de bureau DynoTable affiche chaque élément par sa clé primaire, pour qu'une cible répétée saute aux yeux avant l'envoi de la requête.

Vérifie d’abord dans DynoTable

Avant de construire une transaction multi-éléments, liste les clés cibles dans DynoTable — ouvre la table avec ⌘K et confirme que chaque clé primaire n'apparaît qu'une fois dans ta liste d'actions. Le staging (⌘S) te laisse tester une transaction sur un seul élément avant de monter en charge.

Fusionne les vérifications de condition dans les écritures avec l'Expression Builder. Change de profil avec ⌘P ; vois Se connecter à AWS et Installation.

Sources

Erreurs liées

Références

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

Un client de bureau rapide pour DynamoDB qui exécute le vrai SQL que DynamoDB ne peut pas — JOINs, GROUP BY, agrégations — avec édition visuelle et un agent IA sur tes propres clés Bedrock.

Essai gratuit de 30 jours, sans carte bancaire — ensuite la formule Gratuit, sans limite de durée.