

# `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
    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 }
```

## 标识列操作
<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\$1option* 是 [`ALTER SEQUENCE`](alter-sequence-syntax-support.md)（如 `INCREMENT BY`）支持的选项。这些格式更改现有标识列所基于的序列。

**`DROP IDENTITY [ IF EXISTS ]`**  
此格式从列中移除标识属性。如果指定了 `DROP IDENTITY IF EXISTS` 并且该列不是标识列，则不会引发任何错误。在这种情况下，将改为发出通知。