

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

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

`ALTER TABLE` 可變更資料表的定義。

```
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
    ADD table_constraint_using_index
    ALTER [ COLUMN ] column_name { SET GENERATED { ALWAYS | BY DEFAULT } | SET sequence_option | RESTART [ [ WITH ] restart ] } [...]
    ALTER [ COLUMN ] column_name DROP IDENTITY [ IF EXISTS ]
    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-identity-columns"></a>

**`SET GENERATED { ALWAYS | BY DEFAULT }` / `SET {{sequence_option}}` / `RESTART`**  
這些表單會變更資料欄是身分資料欄，或變更現有身分資料欄的產生屬性。如需詳細資訊，請參閱 [`CREATE TABLE`](create-table-syntax-support.md)。如同 `SET DEFAULT`，這些表單只會影響後續 `INSERT`和 `UPDATE`命令的行為；它們不會導致資料表中已有的資料列變更。  
{{sequence\_option}} 是 支援的選項，[`ALTER SEQUENCE`](alter-sequence-syntax-support.md)例如 `INCREMENT BY`。這些形式會變更以現有身分資料欄為基礎的序列。

**`DROP IDENTITY [ IF EXISTS ]`**  
此表單會從資料欄移除身分屬性。如果已指定 `DROP IDENTITY IF EXISTS` ，且資料欄不是身分資料欄，則不會擲出錯誤。在此情況下，會改為發出通知。

## 新增限制條件動作
<a name="alter-table-add-constraint"></a>

**`ADD {{table_constraint_using_index}}`**  
此表單會根據現有的唯一索引，將新的`UNIQUE`限制新增至資料表。索引的所有資料欄都會包含在限制中。  
索引必須處於 `VALID` 狀態；不支援在目前建置索引時使用索引新增唯一限制條件。  
如果提供限制條件名稱，則會重新命名索引以符合限制條件名稱。否則，限制條件的名稱將與索引相同。  
執行此命令後，限制條件會將索引「擁有」，就像索引是由一般`CREATE UNIQUE INDEX ASYNC`命令建置一樣。特別是，捨棄限制條件也會使索引消失。