

# `ALTER TABLE`
<a name="alter-table-syntax-support"></a>

`ALTER TABLE`은 테이블의 정의를 변경합니다.

## 지원되는 구문
<a name="alter-table-supported-syntax"></a>

```
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    action [, ... ]
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    RENAME [ COLUMN ] column_name TO new_column_name
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    RENAME CONSTRAINT constraint_name TO new_constraint_name
ALTER TABLE [ IF EXISTS ] name
    RENAME TO new_name
ALTER TABLE [ IF EXISTS ] name
    SET SCHEMA new_schema

where action is one of:

    ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ]
    ALTER [ COLUMN ] column_name SET DEFAULT expression
    ALTER [ COLUMN ] column_name DROP DEFAULT
    ALTER [ COLUMN ] column_name DROP NOT NULL
    ALTER [ COLUMN ] column_name DROP EXPRESSION [ IF EXISTS ]
    ALTER [ COLUMN ] column_name ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ]
    ALTER [ COLUMN ] column_name { SET GENERATED { ALWAYS | BY DEFAULT } | SET sequence_option | RESTART [ [ WITH ] restart ] } [...]
    ALTER [ COLUMN ] column_name DROP IDENTITY [ IF EXISTS ]
    ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }
    ADD table_constraint_using_index
    DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
    OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }

and table_constraint_using_index is:

    [ CONSTRAINT constraint_name ]
    UNIQUE USING INDEX index_name
```

## 설명
<a name="alter-table-description"></a>

**`ADD [ COLUMN ] [ IF NOT EXISTS ]`**  
이 양식은 [`CREATE TABLE`](create-table-syntax-support.md)와 동일한 구문을 사용하여 테이블에 새 열을 추가합니다. `IF NOT EXISTS`가 지정되어 있고 이 이름의 열이 이미 있는 경우 오류가 발생하지 않습니다.

**`SET`/`DROP DEFAULT`**  
이러한 양식은 열의 기본값을 설정 또는 제거합니다(제거는 기본값을 NULL로 설정하는 것과 동일함). 새 기본값은 후속 `INSERT` 또는 `UPDATE` 명령에만 적용되며 테이블에 이미 있는 행은 변경되지 않습니다.

**`DROP NOT NULL`**  
이 양식은 null 값을 허용하도록 열을 변경합니다.

**`DROP EXPRESSION [ IF EXISTS ]`**  
이 양식은 저장된 생성 열을 일반 기본 열로 바꿉니다. 열의 기존 데이터는 유지되지만 향후 변경 사항은 더 이상 생성 표현식을 적용하지 않습니다. `DROP EXPRESSION IF EXISTS`가 지정되어 있고 열이 생성 열이 아닌 경우 오류가 발생하지 않습니다. 이 경우 대신 알림이 발행됩니다.

**`ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY``SET GENERATED { ALWAYS | BY DEFAULT }``DROP IDENTITY [ IF EXISTS ]`**  
이러한 양식은 열이 ID 열인지 아니면 기존 ID 열의 생성 속성을 변경하는지 여부를 변경합니다. 세부 정보는 [`CREATE TABLE`](create-table-syntax-support.md) 섹션을 참조하세요. `SET DEFAULT`와 마찬가지로 이러한 형식은 후속 `INSERT` 및 `UPDATE` 명령의 동작에만 영향을 미치며 테이블에 이미 있는 행은 변경되지 않습니다.  
{{sequence\_option}}은 `INCREMENT BY`와 같이 [`ALTER SEQUENCE`](alter-sequence-syntax-support.md)에서 지원하는 옵션입니다. 이러한 형식은 기존 ID 열의 기반이 되는 시퀀스를 변경합니다.  
Amazon Aurora DSQL은 `ADD GENERATED AS IDENTITY`를 사용할 때 명시적 `CACHE` 값을 요구합니다. 또한 자격 증명 열은 `bigint` 열에서만 지원됩니다.  
ID 열을 사용할 때는 캐시 값을 신중하게 고려해야 합니다. 자세한 내용은 [`CREATE SEQUENCE`](create-sequence-syntax-support.md) 페이지의 중요 안내를 참조하세요.  
워크로드 패턴을 기반으로 ID 열을 가장 잘 사용하는 방법에 대한 지침은 [시퀀스 및 자격 증명 열 작업](sequences-identity-columns-working-with.md) 섹션을 참조하세요.

**`SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }`**  
이 양식은 열의 스토리지 모드를 설정합니다. 사용 가능한 스토리지 모드에 대한 자세한 내용은 [`CREATE TABLE`](create-table-syntax-support.md) 페이지의 [스토리지 모드](create-table-syntax-support.md#create-table-storage) 섹션을 참조하세요.

**`ADD {{table_constraint_using_index}}`**  
이 양식은 기존 고유 인덱스를 기반으로 테이블에 새 `UNIQUE` 제약 조건을 추가합니다. 인덱스의 모든 열이 제약 조건에 포함됩니다.  
인덱스는 `VALID` 상태여야 합니다. 인덱스가 현재 빌드 중인 동안 해당 인덱스를 사용하여 고유한 제약 조건을 추가하는 것은 지원되지 않습니다.  
제약 조건의 이름을 지정하면 제약 조건 이름과 일치하도록 인덱스의 이름이 변경됩니다. 그렇지 않으면 제약 조건의 이름이 인덱스와 동일하게 지정됩니다.  
이 명령이 실행된 후 인덱스는 일반 `CREATE UNIQUE INDEX ASYNC` 명령으로 인덱스를 빌드한 것과 동일한 방식으로 제약 조건에 의해 "소유"됩니다. 특히, 제약 조건을 삭제하면 인덱스도 사라집니다.

**`DROP CONSTRAINT [ IF EXISTS ]`**  
이 양식은 테이블에 지정된 제약 조건을 그 기본 인덱스와 함께 삭제합니다. `IF EXISTS`가 지정되고 제약 조건이 존재하지 않으면 오류가 발생하지 않습니다. 이 경우 대신 알림이 발행됩니다.  
현재 `CREATE TABLE` 표현식에서는 새 제약 조건 추가가 지원됩니다. `ALTER TABLE ADD CONSTRAINT`(`DROP CONSTRAINT`에 대한 미러링 지원)는 아직 사용할 수 없습니다. 이 출시 예정 기능에 대한 질문이 있는 경우 AWS Support에 문의하거나 [DSQL Public Discord](https://discord.com/invite/nEF6ksFWru)를 통해 직접 문의하세요.

**`OWNER TO`**  
이 양식은 테이블 소유자를 지정된 사용자로 변경합니다.

**`RENAME`**  
`RENAME` 양식은 테이블 이름, 테이블의 개별 열 이름 또는 테이블의 제약 조건 이름을 변경합니다. 기본 인덱스가 있는 제약 조건의 이름을 변경하면 인덱스의 이름도 변경됩니다. 저장된 데이터에 미치는 영향은 없습니다.

**`SET SCHEMA`**  
이 양식은 테이블을 다른 스키마로 이동합니다. 연결된 인덱스, 제약 조건, 테이블 열이 소유한 시퀀스도 이동됩니다.

## 파라미터
<a name="alter-table-parameters"></a>

**`IF EXISTS`**  
테이블이 없는 경우 오류가 발생하지 않습니다. 이 경우 알림이 발행됩니다.

**{{ 이름}}**  
변경할 기존 테이블 이름(선택적으로 스키마 한정)입니다. 테이블 이름 앞에 `ONLY`를 지정하면 해당 테이블만 변경됩니다. `ONLY`를 지정하지 않으면 테이블 및 모든 하위 테이블(있는 경우)이 변경됩니다. 선택적으로 테이블 이름 뒤에 `*`를 지정하여 하위 테이블이 포함되어 있음을 명시적으로 나타낼 수 있습니다.

**{{column\_name}}**  
새 열 또는 기존 열의 이름입니다.

**{{new\_column\_name}}**  
기존 열의 새 이름입니다.

**{{new\_name}}**  
테이블의 새 이름입니다.

**{{data\_type}}**  
새 열의 데이터 형식입니다.

**{{constraint\_name}}**  
새 제약 조건 또는 기존 제약 조건의 이름입니다.

**`CASCADE`**  
삭제된 제약 조건에 의존하는 객체(예: 열을 참조하는 뷰)를 자동으로 삭제한 다음 해당 객체에 의존하는 모든 객체를 삭제합니다.

**`RESTRICT`**  
종속 객체가 있는 경우 제약 조건 삭제를 거부합니다. 이는 기본 설정 동작입니다.

**{{new\_owner}}**  
테이블의 새 소유자의 사용자 이름입니다.

**{{new\_schema}}**  
테이블을 이동할 스키마의 이름입니다.