

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# `CREATE TABLE`
<a name="create-table-syntax-support"></a>

`CREATE TABLE` 可定義新的資料表。

```
CREATE TABLE [ IF NOT EXISTS ] table_name ( [
  { column_name data_type [ column_constraint [ ... ] ]
    | table_constraint
    | LIKE source_table [ like_option ... ] }
    [, ... ]
] )

where column_constraint is:

[ CONSTRAINT constraint_name ]
{ NOT NULL |
  NULL |
  CHECK ( expression )|
  DEFAULT default_expr |
  GENERATED ALWAYS AS ( generation_expr ) STORED |
  GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY ( sequence_options ) |
  UNIQUE [ NULLS [ NOT ] DISTINCT ] index_parameters |
  PRIMARY KEY index_parameters |

and table_constraint is:

[ CONSTRAINT constraint_name ]
{ CHECK ( expression ) |
  UNIQUE [ NULLS [ NOT ] DISTINCT ] ( column_name [, ... ] ) index_parameters |
  PRIMARY KEY ( column_name [, ... ] ) index_parameters |

and like_option is:

{ INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED | IDENTITY | INDEXES | STATISTICS | ALL }

index_parameters in UNIQUE, and PRIMARY KEY constraints are:
[ INCLUDE ( column_name [, ... ] ) ]
```

## 身分資料欄
<a name="create-table-identity-columns"></a>

**注意**  
使用身分資料欄時，應仔細考慮快取值。如需詳細資訊，請參閱 [`CREATE SEQUENCE`](create-sequence-syntax-support.md) 頁面上的重要標註。  
如需如何根據工作負載模式最佳使用身分資料欄的指引，請參閱 [使用序列和身分資料欄](sequences-identity-columns-working-with.md)。

`GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY ( sequence_options )` 子句會將資料欄建立為*身分資料欄*。它將有一個隱含序列連接到它，在新插入的資料列中，資料欄將自動具有來自指派給它的序列的值。這類資料欄隱含為 `NOT NULL`。

子句`ALWAYS`和 會`BY DEFAULT`決定 `INSERT`和 `UPDATE`命令中使用者指定值的明確處理方式。

在 `INSERT`命令中，如果選取 `ALWAYS` ，則只有在`INSERT`陳述式指定 時，才會接受使用者指定的值`OVERRIDING SYSTEM VALUE`。如果選取 `BY DEFAULT` ，則使用者指定的值優先。

在 `UPDATE`命令中，如果選取 `ALWAYS` ，則會`DEFAULT`拒絕將資料欄更新為 以外的任何值。`BY DEFAULT` 如果選取 ，則欄可以正常更新。( `UPDATE`命令沒有 `OVERRIDING`子句。)

*sequence\$1options* 子句可用來覆寫序列的參數。可用的選項包括針對 [`CREATE SEQUENCE`](create-sequence-syntax-support.md)和 顯示的選項`SEQUENCE NAME name`。如果沒有 `SEQUENCE NAME`，系統會為序列選擇未使用的名稱。