Transaction request cannot include multiple operations on one item

TL;DR — Aynı TransactWriteItems isteğindeki iki eylem aynı öğeyi (aynı birincil anahtar) hedefliyor. DynamoDB, bir işlemdeki her öğenin benzersiz olmasını gerektirir, bu yüzden herhangi birini çalıştırmadan önce tüm çağrıyı reddeder. Yinelenen eylemleri bir tanesine birleştirin ya da birini ayrı bir yazmaya taşıyın.

Ne anlama gelir

ValidationException: Transaction request cannot include multiple operations on one item

Bir TransactWriteItems isteği, hepsi işlenen ya da hepsi başarısız olan en fazla 100 eylemi (Put, Update, Delete, ConditionCheck) gruplar. O API'nin kesin bir kuralı, hiçbir iki eylemin aynı öğeyi hedefleyememesidir — DynamoDB bir öğeyi tam birincil anahtarıyla tanımlar ve her anahtar en fazla bir kez görünebilir. Bu, işlem yürütülmeden önce yakalanan bir HTTP 400 ValidationException'dır ve olduğu gibi yeniden denenebilir değildir.

Neden olur

  • Aynı anahtarda bir ConditionCheck artı bir yazma — bir öğede bir koşulu ileri sürmeye ve aynı işlemde onu Update/Delete etmeye çalıştınız. Bunun yerine koşulu yazmanın ConditionExpression'ına katın.
  • Aynı anahtara iki yazma — örneğin aynı öğe için bir Put ve bir Update, genellikle anahtara göre yineleme gidermeyen bir döngüden.
  • Yinelenen anahtarlı üretilmiş bir toplu istek — bir ORM ya da eşleme katmanı aynı bölüm+sıralama anahtarını iki kez yaydı.
  • Farklı olduğunu düşündüğünüz tablolar genelinde iki farklı eylemde aynı anahtar — öğe benzersiz olarak {tablo, PK, SK}'dir; aynı tablo içinde bir tekrar onu tetikler.

Nasıl düzeltilir

  1. İşlemi oluşturmadan önce birincil anahtara göre yineleme giderin — her {PK, SK} bir kez görünebilir.
  2. Koruduğu yazmaya bir ConditionCheck'i birleştirin: ayrı bir ConditionCheck eylemi eklemek yerine ileri sürmeyi o öğenin kendi ConditionExpression'ına koyun.
  3. İki eylem yerine tek bir UpdateExpression (SET/ADD/REMOVE) kullanarak iki değişikliği bir Update'te birleştirin.
  4. İşlemler gerçekten tek bir eylem olarak ifade edilemiyorsa, kaçınılmaz çok adımlı mantığı ayrı işlemlere ya da yazmalara bölün.

Çok öğeli işlemleri elle oluşturmak, yinelenen anahtarların sızdığı yerdir. DynoTable masaüstü uygulaması, her öğeyi birincil anahtarıyla gösterir, böylece isteği göndermeden önce tekrarlanan bir hedef bellidir.

Önce DynoTable’da kontrol et

Çok öğeli bir işlem oluşturmadan önce hedef anahtarları DynoTable'da listeleyin; ⌘K ile tabloyu açın ve eylem listenizde her bir birincil anahtarın benzersiz olduğunu onaylayın. Aşamalandırma (⌘S), ölçeği büyütmeden önce tek öğelik bir işlemi test etmenize olanak tanır.

Birleştirme koşulu, Expression Builder kullanarak yazma işlemlerini kontrol eder. Profilleri ⌘P ile değiştirin; bkz. Connect to AWS ve Install.

Kaynaklar

İlgili hatalar

Kaynaklar

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.