

# DynamoDB의 PartiQL update 문
<a name="ql-reference.update"></a>

`UPDATE` 문을 사용하면 Amazon DynamoDB 테이블에서 항목 내의 특성 하나 이상의 값을 수정할 수 있습니다.

**참고**  
한 번에 하나의 항목만 업데이트할 수 있어서, 여러 항목을 업데이트하는 단일 DynamoDB PartiQL 문을 실행할 수는 없습니다. 여러 항목을 업데이트하는 방법은 [DynamoDB용 PartiQL에서 트랜잭션 수행](ql-reference.multiplestatements.transactions.md) 또는 [DynamoDB용 PartiQL에서 일괄 작업 실행](ql-reference.multiplestatements.batching.md) 단원을 참조하세요.

**Topics**
+ [구문](#ql-reference.update.syntax)
+ [파라미터](#ql-reference.update.parameters)
+ [반환 값](#ql-reference.update.return)
+ [예제](#ql-reference.update.examples)

## 구문
<a name="ql-reference.update.syntax"></a>

```
UPDATE  table  
[SET | REMOVE]  path  [=  data] […]
WHERE condition [RETURNING returnvalues]
<returnvalues>  ::= [ALL OLD | MODIFIED OLD | ALL NEW | MODIFIED NEW] *
```

## 파라미터
<a name="ql-reference.update.parameters"></a>

***테이블*\$1**  
(필수) 수정할 데이터가 포함된 테이블입니다.

***path***  
(필수) 생성하거나 수정할 속성 이름 또는 문서 경로입니다.

***data***  
(필수) 속성 값 또는 작업의 결과입니다.  
SET과 함께 사용할 수 있는 작업은 다음과 같습니다.  
+ LIST\$1APPEND: 목록 형식에 값을 추가합니다.
+ SET\$1ADD: 숫자 또는 문자열 집합에 값을 추가합니다.
+ SET\$1DELETE: 숫자 또는 문자열 집합에서 값을 제거합니다.

*** 조건***  
(필수) 수정할 항목의 선택 기준입니다. 이 조건은 단일 기본 키 값으로 확인되어야 합니다.

***returnvalues***  
(선택 사항) 항목 속성이 업데이트되기 전이나 후에 표시되는 해당 속성을 가져오려면 `returnvalues`를 사용합니다. 유효한 값은 다음과 같습니다.  
+ `ALL OLD *` - 업데이트 작업 전에 표시된 항목 속성을 모두 반환합니다.
+ `MODIFIED OLD *` - 업데이트 작업 전에 표시된 업데이트된 속성만 반환합니다.
+ `ALL NEW *` - 업데이트 작업 후에 표시되는 항목 속성을 모두 반환합니다.
+ `MODIFIED NEW *` - `UpdateItem` 작업 후에 표시되는 업데이트된 속성만 반환합니다.

## 반환 값
<a name="ql-reference.update.return"></a>

이 문은 `returnvalues` 파라미터를 지정하지 않는 경우 값을 반환하지 않습니다.

**참고**  
DynamoDB 테이블의 모든 항목에 대해 UPDATE 문의 WHERE 절이 true로 평가되지 않으면 `ConditionalCheckFailedException`이 반환됩니다.

## 예제
<a name="ql-reference.update.examples"></a>

기존 항목의 속성 값을 업데이트합니다. 속성이 없으면 새로 생성됩니다.

다음 쿼리는 숫자 형식의 속성(`AwardsWon`)과 맵 형식의 속성(`AwardDetail`)을 추가하여 `"Music"` 테이블에서 항목을 업데이트합니다.

```
UPDATE "Music" 
SET AwardsWon=1 
SET AwardDetail={'Grammys':[2020, 2018]}  
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
```

`RETURNING ALL OLD *`를 추가하여 `Update` 작업 전에 있던 속성을 반환할 수 있습니다.

```
UPDATE "Music" 
SET AwardsWon=1 
SET AwardDetail={'Grammys':[2020, 2018]}  
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
RETURNING ALL OLD *
```

그러면 다음이 반환됩니다.

```
{
    "Items": [
        {
            "Artist": {
                "S": "Acme Band"
            },
            "SongTitle": {
                "S": "PartiQL Rocks"
            }
        }
    ]
}
```

`RETURNING ALL NEW *`를 추가하여 `Update` 작업 후에 있던 속성을 반환할 수 있습니다.

```
UPDATE "Music" 
SET AwardsWon=1 
SET AwardDetail={'Grammys':[2020, 2018]}  
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
RETURNING ALL NEW *
```

그러면 다음이 반환됩니다.

```
{
    "Items": [
        {
            "AwardDetail": {
                "M": {
                    "Grammys": {
                        "L": [
                            {
                                "N": "2020"
                            },
                            {
                                "N": "2018"
                            }
                        ]
                    }
                }
            },
            "AwardsWon": {
                "N": "1"
            }
        }
    ]
}
```

다음 쿼리는 `AwardDetail.Grammys` 목록에 추가하여 `"Music"` 테이블에서 항목을 업데이트합니다.

```
UPDATE "Music" 
SET AwardDetail.Grammys =list_append(AwardDetail.Grammys,[2016])  
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
```

다음 쿼리는 `AwardDetail.Grammys` 목록에서 제거하여 `"Music"` 테이블에서 항목을 업데이트합니다.

```
UPDATE "Music" 
REMOVE AwardDetail.Grammys[2]   
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
```

다음 쿼리는 `AwardDetail` 맵에 `"Music"`을 추가하여 `BillBoard` 테이블에서 항목을 업데이트합니다.

```
UPDATE "Music" 
SET AwardDetail.BillBoard=[2020] 
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
```

다음 쿼리는 문자열 집합 속성 `BandMembers`를 추가하여 `"Music"` 테이블에서 항목을 업데이트합니다.

```
UPDATE "Music" 
SET BandMembers =<<'member1', 'member2'>> 
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
```

다음 쿼리는 문자열 집합 `BandMembers`에 `newbandmember`를 추가하여 `"Music"` 테이블에서 항목을 업데이트합니다.

```
UPDATE "Music" 
SET BandMembers =set_add(BandMembers, <<'newbandmember'>>) 
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
```