

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Arbeiten mit Elementen und Attributen in DynamoDB
<a name="WorkingWithItems"></a>

In Amazon DynamoDB ist ein *Element* eine Sammlung von Attributen. Jedes Attribut verfügt über einen Namen und einen Wert. Ein Attributwert kann eine Skalarfunktion, eine Gruppe oder ein Dokumenttyp sein. Weitere Informationen finden Sie unter [Amazon DynamoDB: Funktionsweise](HowItWorks.md).

DynamoDB bietet vier Operationen für grundlegende CRUD-Funktionalität (erstellen/lesen/aktualisieren/löschen). Alle diese Operationen sind atomar.
+ `PutItem` – ein Element erstellen.
+ `GetItem` – ein Element lesen.
+ `UpdateItem` – ein Element aktualisieren.
+ `DeleteItem` – ein Element löschen.

Jede dieser Operationen erfordert, dass Sie den Primärschlüssel des Elements angeben, mit dem Sie arbeiten möchten. Um z. B. ein Element mit `GetItem` zu lesen, müssen Sie den Partitions- und den Sortierschlüssel (sofern zutreffend) für das Element angeben.

Zusätzlich zu den vier grundlegenden CRUD-Operationen bietet DynamoDB außerdem Folgendes:
+ `BatchGetItem` – Liest bis zu 100 Elemente aus einer oder mehreren Tabellen.
+ `BatchWriteItem` – erstellt oder löscht bis zu 25 Elemente in einer oder mehreren Tabellen.

Diese Stapeloperationen kombinieren mehrere CRUD-Operationen in einer einzigen Anforderung. Darüber hinaus können die Stapeloperationen Elemente parallel lesen und schreiben, um Antwortlatenzen zu minimieren.

In diesem Abschnitt wird beschrieben, wie Sie diese Operationen verwenden. Außerdem wird auf verwandte Themen, wie z. B. bedingte Updates und unteilbare Zähler, eingegangen. Dieser Abschnitt enthält auch Beispielcode, der die verwendet AWS SDKs. 

**Topics**
+ [Elementgrößen und -formate in DynamoDB](CapacityUnitCalculations.md)
+ [Lesen eines Elements](#WorkingWithItems.ReadingData)
+ [Schreiben eines Elements](#WorkingWithItems.WritingData)
+ [Rückgabewerte](#WorkingWithItems.ReturnValues)
+ [Batch-Vorgänge](#WorkingWithItems.BatchOperations)
+ [Unteilbare Zähler](#WorkingWithItems.AtomicCounters)
+ [Bedingte Schreibvorgänge](#WorkingWithItems.ConditionalUpdate)
+ [Verwenden von Ausdrücken in DynamoDB](Expressions.md)
+ [Verwenden von Time to Live (TTL) in DynamoDB](TTL.md)
+ [Abfragen von Tabellen in DynamoDB](Query.md)
+ [Scannen von Tabellen in DynamoDB](Scan.md)
+ [PartiQL – Eine SQL-kompatible Abfragesprache für Amazon DynamoDB](ql-reference.md)
+ [Arbeiten mit Elementen: Java](JavaDocumentAPIItemCRUD.md)
+ [Arbeiten mit Elementen: .NET](LowLevelDotNetItemCRUD.md)

## Lesen eines Elements
<a name="WorkingWithItems.ReadingData"></a>

Verwenden Sie zum Lesen eines Elements von einer DynamoDB-Tabelle die Operation `GetItem`. Sie müssen den Namen der Tabelle sowie den Primärschlüssel des gewünschten Elements angeben.

**Example**  
Das folgende AWS CLI Beispiel zeigt, wie ein Element aus der `ProductCatalog` Tabelle gelesen wird.  

```
aws dynamodb get-item \
    --table-name ProductCatalog \
    --key '{"Id":{"N":"1"}}'
```

**Anmerkung**  
Mit `GetItem` müssen Sie den Primärschlüssel *vollständig* und nicht nur teilweise angeben. Wenn eine Tabelle über einen zusammengesetzten Primärschlüssel (Partitions- und Sortierschlüssel) verfügt, müssen Sie einen Wert für den Partitionsschlüssel und einen Wert für den Sortierschlüssel angeben.

Eine `GetItem`-Anforderung führt standardmäßig einen Eventually Consistent-Lesevorgang durch. Sie können den Parameter `ConsistentRead` verwenden, um stattdessen einen Strongly Consistent-Lesevorgang anzufordern. (Dadurch werden zusätzliche Lesekapazitätseinheiten verbraucht, es wird jedoch die meiste up-to-date Version des Elements zurückgegeben.)

`GetItem` gibt alle Attribute des Elements zurück. Sie können einen *Projektionsausdruck* verwenden, um nur einige der Attribute zurückzugeben. Weitere Informationen finden Sie unter [Verwenden von Projektionsausdrücken in DynamoDB](Expressions.ProjectionExpressions.md).

Um die Anzahl der von `GetItem` verbrauchten Lesekapazitätseinheiten zurückzugeben, legen Sie den Parameter `ReturnConsumedCapacity` auf `TOTAL` fest.

**Example**  
Das folgende Beispiel AWS Command Line Interface (AWS CLI) zeigt einige der optionalen `GetItem` Parameter.  

```
aws dynamodb get-item \
    --table-name ProductCatalog \
    --key '{"Id":{"N":"1"}}' \
    --consistent-read \
    --projection-expression "Description, Price, RelatedItems" \
    --return-consumed-capacity TOTAL
```

## Schreiben eines Elements
<a name="WorkingWithItems.WritingData"></a>

Zum Erstellen, Aktualisieren oder Löschen eines Elements in einer DynamoDB-Tabelle verwenden Sie eine der folgenden Operationen:
+ `PutItem`
+ `UpdateItem`
+ `DeleteItem`

Für diese Operationen müssen Sie jeweils den Primärschlüssel vollständig und nicht nur teilweise angeben. Wenn eine Tabelle über einen zusammengesetzten Primärschlüssel (Partitions- und Sortierschlüssel) verfügt, müssen Sie einen Wert für den Partitionsschlüssel und einen Wert für den Sortierschlüssel angeben.

Um die Anzahl der von einer dieser Operationen verbrauchten Schreibkapazitätseinheiten zurückzugeben, legen Sie den Parameter `ReturnConsumedCapacity` auf einen der folgenden Werte fest: 
+ `TOTAL` – Gibt die Gesamtanzahl der verbrauchten Schreibkapazitätseinheiten zurück.
+ `INDEXES` – Gibt die Gesamtzahl der verbrauchten Schreibkapazitätseinheiten mit Zwischensummen für die Tabelle und alle sekundären Indizes zurück, die vom Vorgang betroffen waren.
+ `NONE` – Es werden keine Schreibkapazitätsdetails zurückgegeben. (Dies ist die Standardeinstellung.)

### PutItem
<a name="WorkingWithItems.WritingData.PutItem"></a>

`PutItem` erstellt ein neues Element. Wenn ein Element mit demselben Schlüssel bereits in der Tabelle vorhanden ist, wird es durch das neue Element ersetzt.

**Example**  
Schreiben Sie ein neues Element in die `Thread`-Tabelle. Der Primärschlüssel für die `Thread`-Tabelle besteht aus `ForumName` (Partitionsschlüssel) und `Subject` (Sortierschlüssel).  

```
aws dynamodb put-item \
    --table-name Thread \
    --item file://item.json
```
Die Argumente für `--item` werden in der Datei `item.json` gespeichert.  

```
{
    "ForumName": {"S": "Amazon DynamoDB"},
    "Subject": {"S": "New discussion thread"},
    "Message": {"S": "First post in this thread"},
    "LastPostedBy": {"S": "fred@example.com"},
    "LastPostDateTime": {"S": "201603190422"}
}
```

### UpdateItem
<a name="WorkingWithItems.WritingData.UpdateItem"></a>

Wenn kein Element mit dem angegebenen Schlüssel vorhanden ist, erstellt `UpdateItem` ein neues Element. Andernfalls werden die Attribute eines vorhandenen Elements geändert.

Sie verwenden einen *Aktualisierungsausdruck*, um die zu ändernden Attribute und deren neue Werte anzugeben. Weitere Informationen finden Sie unter [Verwenden von Aktualisierungsausdrücken in DynamoDB](Expressions.UpdateExpressions.md). 

Innerhalb des Aktualisierungsausdrucks verwenden Sie die Ausdrucksattributwerte als Platzhalter für die tatsächlichen Werte. Weitere Informationen finden Sie unter [Verwenden von Ausdrucksattributwerten in DynamoDB](Expressions.ExpressionAttributeValues.md).

**Example**  
Ändern Sie verschiedene Attribute im Element `Thread`. Der optionale Parameter `ReturnValues` zeigt das Element so an, wie es nach der Aktualisierung dargestellt wird. Weitere Informationen finden Sie unter [Rückgabewerte](#WorkingWithItems.ReturnValues).  

```
aws dynamodb update-item \
    --table-name Thread \
    --key file://key.json \
    --update-expression "SET Answered = :zero, Replies = :zero, LastPostedBy = :lastpostedby" \
    --expression-attribute-values file://expression-attribute-values.json \
    --return-values ALL_NEW
```

Die Argumente für `--key` werden in der Datei `key.json` gespeichert.

```
{
    "ForumName": {"S": "Amazon DynamoDB"},
    "Subject": {"S": "New discussion thread"}
}
```

Die Argumente für `--expression-attribute-values` werden in der Datei `expression-attribute-values.json` gespeichert.

```
{
    ":zero": {"N":"0"},
    ":lastpostedby": {"S":"barney@example.com"}
}
```

### DeleteItem
<a name="WorkingWithItems.WritingData.DeleteItem"></a>

`DeleteItem` löscht das Element mit dem angegebenen Schlüssel.

**Example**  
Das folgende AWS CLI Beispiel zeigt, wie das `Thread` Element gelöscht wird.  

```
aws dynamodb delete-item \
    --table-name Thread \
    --key file://key.json
```

## Rückgabewerte
<a name="WorkingWithItems.ReturnValues"></a>

In einigen Fällen soll DynamoDB bestimmte Attributwerte so zurückgeben, wie sie vor oder nach der Änderung erschienen. Die Operationen `PutItem`, `UpdateItem` und `DeleteItem` verfügen über einen Parameter `ReturnValues`, mit dem Sie Attributwerte zurückgeben können, bevor oder nachdem diese geändert wurden.

Der Standardwert für `ReturnValues` ist `NONE`. Dies bedeutet, dass DynamoDB keine Informationen über Attribute zurückgibt, die geändert wurden. 

Nachfolgend sind die anderen gültigen Einstellungen für `ReturnValues` nach DynamoDB-API-Operation sortiert aufgeführt.

### PutItem
<a name="WorkingWithItems.ReturnValues.PutItem"></a>
+ `ReturnValues`: `ALL_OLD`
  + Wenn Sie ein vorhandenes Element überschreiben, gibt `ALL_OLD` das gesamte Element so zurück, wie es vor dem Überschreiben dargestellt wurde.
  + Wenn Sie ein nicht vorhandenes Element schreiben, hat `ALL_OLD` keine Auswirkung.

### UpdateItem
<a name="WorkingWithItems.ReturnValues.UpdateItem"></a>

Die häufigste Nutzung für `UpdateItem` ist das Aktualisieren eines vorhandenen Elements. `UpdateItem` führt eigentlich eine *upsert*-Operation aus. Dies bedeutet, dass das Element automatisch erstellt wird, wenn es noch nicht vorhanden ist.
+ `ReturnValues`: `ALL_OLD`
  + Wenn Sie ein vorhandenes Element aktualisieren, gibt `ALL_OLD` das gesamte Element so zurück, wie es vor dem Aktualisieren dargestellt wurde.
  + Wenn Sie ein nicht vorhandenes Element aktualisieren (Upsert-Operation), hat `ALL_OLD` keine Auswirkung.
+ `ReturnValues`: `ALL_NEW`
  + Wenn Sie ein vorhandenes Element aktualisieren, gibt `ALL_NEW` das gesamte Element so zurück, wie es nach dem Aktualisieren dargestellt wird.
  + Wenn Sie ein nicht vorhandenes Element aktualisieren (Upsert-Operation), gibt `ALL_NEW` das gesamte Element zurück.
+ `ReturnValues`: `UPDATED_OLD`
  + Wenn Sie ein vorhandenes Element aktualisieren, gibt `UPDATED_OLD` nur die aktualisierten Attribute so zurück, wie sie vor dem Aktualisieren dargestellt wurden.
  + Wenn Sie ein nicht vorhandenes Element aktualisieren (Upsert-Operation), hat `UPDATED_OLD` keine Auswirkung.
+ `ReturnValues`: `UPDATED_NEW`
  + Wenn Sie ein vorhandenes Element aktualisieren, gibt `UPDATED_NEW` nur die betroffenen Attribute so zurück, wie sie nach dem Aktualisieren dargestellt werden.
  + Wenn Sie ein nicht vorhandenes Element aktualisieren (Upsert-Operation), gibt `UPDATED_NEW` nur die aktualisierten Attribute so zurück, wie sie nach dem Aktualisieren dargestellt werden.

### DeleteItem
<a name="WorkingWithItems.ReturnValues.DeleteItem"></a>
+ `ReturnValues`: `ALL_OLD`
  + Wenn Sie ein vorhandenes Element löschen, gibt `ALL_OLD` das gesamte Element so zurück, wie es vor dem Löschen dargestellt wurde.
  + Wenn Sie ein nicht vorhandenes Element löschen, gibt `ALL_OLD` keine Daten zurück.

## Batch-Vorgänge
<a name="WorkingWithItems.BatchOperations"></a>

Für Anwendungen, die mehrere Elemente lesen oder schreiben müssen, stellt DynamoDB die Operationen `BatchGetItem` und `BatchWriteItem` bereit. Mithilfe dieser Operationen können Sie die Anzahl der Netzläufe von Ihrer Anwendung für DynamoDB reduzieren. Außerdem führt DynamoDB die einzelnen Lese- oder Schreibvorgänge parallel aus. Ihre Anwendungen profitieren von dieser Parallelität, ohne Gleichzeitigkeit oder Threads verwalten zu müssen.

Die Stapeloperationen sind im Wesentlichen Wrapper für mehrere Lese- oder Schreibanforderungen. Wenn eine `BatchGetItem`-Anforderung z. B. fünf Elemente enthält, führt DynamoDB fünf `GetItem`-Operationen in Ihrem Namen aus. Wenn eine `BatchWriteItem`-Anforderung zwei PUT-Anforderungen und vier DELETE-Anforderungen enthält, führt DynamoDB zwei `PutItem`- und vier `DeleteItem`-Anforderungen aus.

Im Allgemeinen treten bei einer Stapeloperation nur Fehler auf, wenn *alle* im Stapel enthaltenen Anforderungen fehlschlagen. Angenommen, Sie führen eine `BatchGetItem`-Operation aus, doch bei einer der `GetItem`-Einzelanforderungen des Stapels tritt ein Fehler auf. In diesem Fall gibt `BatchGetItem` die Schlüssel und Daten der fehlgeschlagenen `GetItem`-Anforderung zurück. Die anderen `GetItem`-Anforderungen des Stapels sind davon nicht betroffen.

### BatchGetItem
<a name="WorkingWithItems.BatchOperations.BatchGetItem"></a>

Eine einzelne `BatchGetItem`-Operation kann bis zu 10 individuelle `GetItem`-Anforderungen enthalten und bis zu 16 MB Daten abrufen. Darüber hinaus kann eine `BatchGetItem`-Operation Elemente aus mehreren Tabellen abrufen.

**Example**  
Rufen Sie zwei Elemente aus der `Thread`-Tabelle mit einem Projektionsausdruck ab, um nur einige der Attribute zurückzugeben.  

```
aws dynamodb batch-get-item \
    --request-items file://request-items.json
```
Die Argumente für `--request-items` werden in der Datei `request-items.json` gespeichert.  

```
{
    "Thread": {
        "Keys": [
            {
                "ForumName":{"S": "Amazon DynamoDB"},
                "Subject":{"S": "DynamoDB Thread 1"}
            },
            {
                "ForumName":{"S": "Amazon S3"},
                "Subject":{"S": "S3 Thread 1"}
            }
        ],
        "ProjectionExpression":"ForumName, Subject, LastPostedDateTime, Replies"
    }
}
```

### BatchWriteItem
<a name="WorkingWithItems.BatchOperations.BatchWriteItem"></a>

Die `BatchWriteItem`-Operation kann bis zu 25 individuelle `PutItem` und `DeleteItem`-Anforderungen enthalten und bis zu 16 MB Daten schreiben. (Die maximale Größe eines einzelnen Elements beträgt 400 KB.) Darüber hinaus kann eine `BatchWriteItem`-Operation Elemente in mehreren Tabellen einfügen oder daraus löschen. 

**Anmerkung**  
`BatchWriteItem` unterstützt keine `UpdateItem`-Anforderungen.

**Example**  
Fügen Sie der `ProductCatalog`-Tabelle zwei Elemente hinzu.  

```
aws dynamodb batch-write-item \
    --request-items file://request-items.json
```
Die Argumente für `--request-items` werden in der Datei `request-items.json` gespeichert.  

```
{
    "ProductCatalog": [
        {
            "PutRequest": {
                "Item": {
                    "Id": { "N": "601" },
                    "Description": { "S": "Snowboard" },
                    "QuantityOnHand": { "N": "5" },
                    "Price": { "N": "100" }
                }
            }
        },
        {
            "PutRequest": {
                "Item": {
                    "Id": { "N": "602" },
                    "Description": { "S": "Snow shovel" }
                }
            }
        }
    ]
}
```

## Unteilbare Zähler
<a name="WorkingWithItems.AtomicCounters"></a>

Mit der `UpdateItem`-Operation können Sie einen *unteilbaren Zähler* implementieren. Hierbei handelt es sich um ein numerisches Attribut, das erhöht wird, und zwar ohne Bedingung und ohne Konflikte mit anderen Schreibanforderungen. (Alle Schreibanforderungen werden in der Reihenfolge angewendet, in der sie empfangen wurden.) Mit einem unteilbaren Zähler sind die Updates nicht idempotent. Mit anderen Worten, der numerische Wert wird bei jedem Aufruf von `UpdateItem` erhöht oder verringert. Wenn der zur Aktualisierung des unteilbaren Zählers verwendete Inkrementwert positiv ist, kann dies zu einer Überzählung führen. Wenn der Inkrementwert negativ ist, kann dies zu einer Unterzählung führen.

Sie können einen unteilbaren Zähler verwenden, um die Anzahl der Besucher einer Website zu verfolgen. In diesem Fall erhöht Ihre Anwendung einen numerischen Wert, unabhängig vom aktuellen Wert. Wenn bei einer `UpdateItem`-Operation ein Fehler auftritt, kann die Anwendung die Operation einfach wiederholen. Das bringt zwar das Risiko mit sich, den Zähler zweimal zu aktualisieren, doch eine leichte Unter- oder Überzählung der Websitebesucher ist tolerierbar.

Ein unteilbarer Zähler ist nicht geeignet, wenn eine Überzählung oder Unterzählung nicht toleriert werden kann (z. B. in einer Bankanwendung). In diesem Fall ist es sicherer, ein bedingtes Update anstelle eines unteilbaren Zählers zu verwenden.

Weitere Informationen finden Sie unter [Vergrößern und Verkleinern numerischer Attribute](Expressions.UpdateExpressions.md#Expressions.UpdateExpressions.SET.IncrementAndDecrement).

**Example**  
Im folgenden AWS CLI Beispiel wird der Wert `Price` eines Produkts um 5 erhöht. In diesem Beispiel war bekannt, dass das Element existiert, bevor der Zähler aktualisiert wurde. Da `UpdateItem` nicht idempotent ist, steigt `Price` bei jedem Ausführen dieses Codes an.   

```
aws dynamodb update-item \
    --table-name ProductCatalog \
    --key '{"Id": { "N": "601" }}' \
    --update-expression "SET Price = Price + :incr" \
    --expression-attribute-values '{":incr":{"N":"5"}}' \
    --return-values UPDATED_NEW
```

## Bedingte Schreibvorgänge
<a name="WorkingWithItems.ConditionalUpdate"></a>

Standardmäßig sind die DynamoDB-Schreiboperationen (`PutItem`,`DeleteItem`) *bedingungslos*: Jede Operation überschreibt ein vorhandenes Element, das den angegebenen Primärschlüssel hat.

DynamoDB unterstützt optional bedingte Schreibvorgänge für diese Operationen. Ein bedingter Schreibvorgang wird nur dann erfolgreich ausgeführt, wenn die Elementattribute eine oder mehrere erwartete Bedingungen erfüllen. Andernfalls wird ein Fehler zurückgegeben.

Bedingte Schreibvorgänge vergleichen ihre Bedingungen mit der zuletzt aktualisierten Version des Elements. Beachten Sie, dass der bedingte Schreibvorgang kein vorheriges Element findet, wenn das Element zuvor noch nicht vorhanden war oder wenn der letzte erfolgreiche Vorgang für dieses Element ein Löschvorgang war.

 Bedingte Schreibvorgänge sind in vielen Situationen hilfreich. Eine `PutItem`-Operation soll beispielsweise nur erfolgreich abgeschlossen werden, wenn noch kein Element mit demselben Primärschlüssel vorhanden ist. Sie können eine `UpdateItem`-Operation auch daran hindern, ein Element zu ändern, wenn eines seiner Attribute einen bestimmten Wert aufweist.

Bedingte Schreibvorgänge sind hilfreich, wenn mehrere Benutzer versuchen, dasselbe Element zu ändern. Betrachten Sie das folgende Diagramm, in dem zwei Benutzer (Alice und Bob) mit demselben Element aus einer DynamoDB-Tabelle arbeiten:

![Die Benutzer Alice und Bob versuchen, ein Element mit der ID 1 zu ändern, was zeigt, dass bedingte Schreibvorgänge erforderlich sind.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/update-no-condition.png)


Angenommen, Alice verwendet das, AWS CLI um das Attribut auf 8 zu aktualisieren. `Price`

```
aws dynamodb update-item \
    --table-name ProductCatalog \
    --key '{"Id":{"N":"1"}}' \
    --update-expression "SET Price = :newval" \
    --expression-attribute-values file://expression-attribute-values.json
```

Die Argumente für `--expression-attribute-values` werden in der Datei `expression-attribute-values.json` gespeichert:

```
{
    ":newval":{"N":"8"}
}
```

Angenommen, Bob erstellt später eine ähnliche `UpdateItem`-Anforderung, ändert den `Price` jedoch in 12. Für Bob sieht der Parameter `--expression-attribute-values` wie folgt aus:

```
{
    ":newval":{"N":"12"}
}
```

Bobs Anforderung wird erfolgreich ausgeführt, aber das Update, das Alice vorher vorgenommen hatte, geht verloren.

Für eine bedingte `PutItem`-, `DeleteItem`- oder `UpdateItem`-Anforderung geben Sie einen Bedingungsausdruck an. Ein *Bedingungsausdruck* ist eine Zeichenfolge, die Attributnamen, bedingte Operatoren und integrierte Funktionen enthält. Der gesamte Ausdruck muss mit True ausgewertet werden. Andernfalls schlägt sie fehl.

Betrachten Sie jetzt das folgende Diagramm, das zeigt, wie bedingte Schreibvorgänge verhindern würden, dass die von Alice vorgenommene Aktualisierung überschrieben wird:

![Durch bedingtes Schreiben wird verhindert, dass die Aktualisierung von Benutzer Bob die Änderung von Benutzerin Alice am selben Element überschreibt.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/update-yes-condition.png)


Alice versucht zunächst, `Price` auf 8 zu aktualisieren, jedoch nur wenn der aktuelle `Price` 10 beträgt.

```
aws dynamodb update-item \
    --table-name ProductCatalog \
    --key '{"Id":{"N":"1"}}' \
    --update-expression "SET Price = :newval" \
    --condition-expression "Price = :currval" \
    --expression-attribute-values file://expression-attribute-values.json
```

Die Argumente für `--expression-attribute-values` werden in der Datei `expression-attribute-values.json` gespeichert.

```
{
    ":newval":{"N":"8"},
    ":currval":{"N":"10"}
}
```

Das Update von Alice wird erfolgreich ausgeführt, da die Bedingung mit True ausgewertet wird.

Als Nächstes versucht Bob, den `Price` auf 12 zu aktualisieren, jedoch nur wenn der aktuelle `Price` 10 beträgt. Für Bob sieht der Parameter `--expression-attribute-values` wie folgt aus:

```
{
    ":newval":{"N":"12"},
    ":currval":{"N":"10"}
}
```

Da Alice den `Price` zuvor in 8 geändert hat, wird der Bedingungsausdruck mit False ausgewertet und Bobs Aktualisierung schlägt fehl.

Weitere Informationen finden Sie unter [CLI-Beispiel für DynamoDB-Bedingungsausdrücke](Expressions.ConditionExpressions.md).

### Idempotenz von bedingten Schreibvorgängen
<a name="WorkingWithItems.ConditionalWrites.Idempotence"></a>

Bedingte Schreibvorgänge können *idempotent* sein, wenn die bedingte Prüfung für dasselbe Attribut ausgeführt wird, das aktualisiert wird. Das bedeutet, dass DynamoDB den jeweiligen Schreibvorgang nur ausführt, wenn bestimmte Attributwerte in dem Element mit den zum Zeitpunkt der Anforderung erwarteten Werten übereinstimmen. 

Angenommen, Sie erstellen eine `UpdateItem`-Anforderung, um den `Price` eines Elements um 3 zu erhöhen, jedoch nur wenn der `Price` aktuell 20 beträgt. Nachdem Sie die Anforderung senden und bevor Sie die Ergebnisse erhalten, tritt ein Netzwerkfehler auf und Sie wissen nicht, ob die Anforderung erfolgreich war. Da dieser bedingte Schreibvorgang idempotent ist, können Sie dieselbe `UpdateItem`-Anforderung wiederholen und DynamoDB aktualisiert das Element nur, wenn `Price` gegenwärtig 20 beträgt.

### Von bedingten Schreibvorgängen verbrauchte Kapazitätseinheiten
<a name="WorkingWithItems.ConditionalWrites.ReturnConsumedCapacity"></a>

Wenn `ConditionExpression` während eines bedingten Schreibvorgangs als falsch ausgewertet wird, verbraucht DynamoDB weiterhin Schreibkapazität aus der Tabelle. Die verbrauchte Menge hängt von der Größe des vorhandenen Elements ab (oder beträgt mindestens 1). Wenn beispielsweise ein vorhandenes Element 300 KB groß ist und das neue Element, das Sie erstellen oder aktualisieren möchten, 310 KB hat, entsprechen die verbrauchten Schreibkapazitätseinheiten 300, wenn die Bedingung fehlschlägt, und 310, wenn die Bedingung erfolgreich ist. Wenn es sich um ein neues Element handelt (kein vorhandenes Element), beträgt die verbrauchte Schreibkapazität 1, wenn die Bedingung fehlschlägt, und 310, wenn die Bedingung erfolgreich ist.

**Anmerkung**  
Schreibvorgänge verbrauchen nur *Schreib*kapazitätseinheiten. Sie belegen keine *Lese*kapazitätseinheiten.

Tritt bei einem bedingten Schreibvorgang ein Fehler auf, wird eine `ConditionalCheckFailedException` zurückgegeben. In diesem Fall erhalten Sie in der Antwort keine Informationen über die verbrauchte Schreibkapazität.

Um die Anzahl von Schreibkapazitätseinheiten zurückzugeben, die während eines bedingten Schreibvorgangs verbraucht wurden, verwenden Sie den Parameter `ReturnConsumedCapacity`:
+ `TOTAL` – Gibt die Gesamtanzahl der verbrauchten Schreibkapazitätseinheiten zurück.
+ `INDEXES` – Gibt die Gesamtzahl der verbrauchten Schreibkapazitätseinheiten mit Zwischensummen für die Tabelle und alle sekundären Indizes zurück, die vom Vorgang betroffen waren.
+ `NONE` – Es werden keine Schreibkapazitätsdetails zurückgegeben. (Dies ist die Standardeinstellung.)

  

**Anmerkung**  
Im Unterschied zu einem globalen sekundären Index teilt ein lokaler sekundärer Index seine bereitgestellte Durchsatzkapazität mit der Tabelle. Die Lese- und Schreibaktivität auf einem lokalen sekundären Index verbraucht die bereitgestellte Durchsatzkapazität aus der Tabelle.