Transaction request cannot include multiple operations on one item

TL;DR — Zwei Aktionen im selben TransactWriteItems-Request zielen auf dasselbe Item (denselben Primärschlüssel). DynamoDB verlangt, dass jedes Item in einer Transaktion eindeutig ist, und lehnt den gesamten Aufruf ab, bevor irgendetwas davon läuft. Fass die doppelten Aktionen zu einer zusammen, oder zieh eine davon in einen separaten Write.

Was es bedeutet

ValidationException: Transaction request cannot include multiple operations on one item

Ein TransactWriteItems-Request gruppiert bis zu 100 Aktionen (Put, Update, Delete, ConditionCheck), die alle committen oder alle scheitern. Eine harte Regel dieser API ist, dass keine zwei Aktionen dasselbe Item adressieren dürfen — DynamoDB identifiziert ein Item über seinen vollständigen Primärschlüssel, und jeder Schlüssel darf höchstens einmal vorkommen. Das ist eine HTTP-400-ValidationException, die vor der Ausführung der Transaktion abgefangen wird, und sie ist so wie sie ist nicht wiederholbar.

Warum es passiert

  • Ein ConditionCheck plus ein Write auf demselben Schlüssel — du hast versucht, eine Bedingung auf einem Item zu behaupten und es zugleich in derselben Transaktion zu Update/Delete. Falte die Bedingung stattdessen in die ConditionExpression des Writes.
  • Zwei Writes auf denselben Schlüssel — z. B. ein Put und ein Update für dasselbe Item, oft aus einer Schleife, die nicht nach Schlüssel dedupliziert.
  • Ein generierter Batch mit doppelten Schlüsseln — ein ORM oder eine Mapping-Schicht hat denselben Partition+Sort Key zweimal ausgegeben.
  • Derselbe Schlüssel in zwei verschiedenen Aktionen über Tabellen, die du für verschieden hältst — das Item ist eindeutig {table, PK, SK}; eine Wiederholung innerhalb derselben Tabelle löst es aus.

So behebst du es

  1. Dedupliziere nach Primärschlüssel, bevor du die Transaktion baust — jeder {PK, SK} darf einmal vorkommen.
  2. Merge einen ConditionCheck in den Write, den er absichert: Setze die Behauptung in die eigene ConditionExpression dieses Items, statt eine separate ConditionCheck-Aktion hinzuzufügen.
  3. Kombiniere zwei Mutationen zu einem Update mit einer einzigen UpdateExpression (SET/ADD/REMOVE) statt zwei Aktionen.
  4. Teile unvermeidbare mehrstufige Logik auf separate Transaktionen oder Writes auf, wenn sich die Operationen wirklich nicht als eine Aktion ausdrücken lassen.

Multi-Item-Transaktionen von Hand zusammenzustellen ist der Ort, an dem sich doppelte Schlüssel einschleichen. Die DynoTable-Desktop-App zeigt jedes Item über seinen Primärschlüssel, sodass ein wiederholtes Ziel offensichtlich ist, bevor du den Request sendest.

Zuerst in DynoTable prüfen

Before building a multi-item transaction, list target keys in DynoTable — öffne die Tabelle mit ⌘K and confirm each primary key is unique in your action list. Staging (⌘S) lets you test a single-item transaction bevor du scale up.

Merge condition checks into writes using the Expression Builder. Wechsle Profile mit ⌘P; see Mit AWS verbinden and Installation.

Quellen

Verwandte Fehler

Referenzen

Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.