

# ID 열
<a name="sequences-identity-columns-overview"></a>

**중요**  
자격 증명 열을 사용할 때는 캐시 값을 신중하게 고려해야 합니다. 자세한 내용은 [`CREATE SEQUENCE`](create-sequence-syntax-support.md) 페이지의 중요 안내를 참조하세요.  
워크로드 패턴을 기반으로 자격 증명 열을 가장 잘 사용하는 방법에 대한 지침은 [시퀀스 및 자격 증명 열 작업](sequences-identity-columns-working-with.md) 섹션을 참조하세요.

자격 증명 열은 암시적 시퀀스에서 자동으로 생성되는 특수 열입니다. 키 값을 생성하는 데 사용할 수 있습니다. 자격 증명 열을 만들려면 [`CREATE TABLE`](create-table-syntax-support.md)의 `GENERATED ... AS IDENTITY` 절을 사용합니다. 예를 들면 다음과 같습니다.

```
CREATE TABLE people (
    id bigint GENERATED ALWAYS AS IDENTITY (CACHE 70000),
    ...
);
```

또는 다음을 사용합니다.

```
CREATE TABLE people (
    id bigint GENERATED BY DEFAULT AS IDENTITY (CACHE 70000),
    ...
);
```

자세한 내용은 [`CREATE TABLE`](create-table-syntax-support.md) 섹션을 참조하세요.

자격 증명 열이 있는 테이블에서 `INSERT` 명령이 실행되고 자격 증명 열에 명시적으로 지정된 값이 없는 경우 암시적 시퀀스에서 생성된 값이 삽입됩니다. 예를 들어 앞의 정의를 사용하고 적절한 열을 추가로 가정하여 다음을 작성합니다.

```
INSERT INTO people (name, address) VALUES ('A', 'foo');
INSERT INTO people (name, address) VALUES ('B', 'bar');
```

1부터 `id` 열 값을 생성하여 다음 테이블 데이터를 생성합니다.

```
 id | name | address
----+------+---------
  1 | A    | foo
  2 | B    | bar
```

또는 값 대신 `DEFAULT` 키워드를 지정하여 시퀀스 생성 값을 명시적으로 요청할 수 있습니다.

```
INSERT INTO people (id, name, address) VALUES (DEFAULT, 'C', 'baz');
```

마찬가지로 `DEFAULT` 키워드는 `UPDATE` 명령에 사용할 수 있습니다.

따라서 여러 가지 면에서 자격 증명 열은 기본값이 있는 열처럼 동작합니다.

열 정의의 `ALWAYS` 및 `BY DEFAULT` 절은 `INSERT` 및 `UPDATE` 명령에서 사용자 지정 값을 명시적으로 처리하는 방법을 결정합니다. `INSERT` 명령에서 `ALWAYS`가 선택된 경우 `INSERT` 문이 `OVERRIDING SYSTEM VALUE`를 지정하는 경우에만 사용자 지정 값이 허용됩니다. `BY DEFAULT`를 선택하면 사용자 지정 값이 우선합니다. 따라서 `BY DEFAULT`를 사용하면 기본값과 더 유사한 동작이 발생하며, 기본값은 명시적 값으로 재정의될 수 있는 반면 `ALWAYS`는 실수로 명시적 값을 삽입하는 것에 대해 더 많은 보호를 제공합니다.

자격 증명 열의 데이터 형식은 시퀀스에서 지원하는 데이터 형식 중 하나여야 합니다. ([`CREATE SEQUENCE`](create-sequence-syntax-support.md)를 참조하세요.) 자격 증명 열을 만들 때 연결된 시퀀스의 속성을 지정하거나([`CREATE TABLE`](create-table-syntax-support.md) 참조) 나중에 변경할 수 있습니다([`ALTER TABLE`](alter-table-syntax-support.md) 참조).

자격 증명 열은 자동으로 `NOT NULL`로 표시됩니다. 그러나 자격 증명 열은 고유성을 보장하지 않습니다. (시퀀스는 일반적으로 고유한 값을 반환하지만 앞서 설명한 대로 시퀀스를 재설정하거나 값을 자격 증명 열에 수동으로 삽입할 수 있습니다.) `PRIMARY KEY` 또는 `UNIQUE` 제약 조건을 사용하여 고유성을 적용해야 합니다.