---
title: "更改表 | OceanBase 文档中心"
description: 更改表 表创建成功后，您可以使用 ALTER TABLE 语句对表进行修改。 更改表的 Collation 和字符集 创建表时，如果未明确定义表的 Collation 和字符集，则默认使用数据库的字符集和字符序，数据库的 Collation 和字符集的详细介绍信息请参见 数据库级字符集和字符序 。 表创建后，您可以修…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.0.0 社区版

# 更改表

更新时间：2026-07-03 18:08:25

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.0.0/zh-CN/500.administrator-guide/700.database-object-management/200.manage-tables/600.change-table.md)  

表创建成功后，您可以使用 `ALTER TABLE` 语句对表进行修改。

## 更改表的 Collation 和字符集

创建表时，如果未明确定义表的 Collation 和字符集，则默认使用数据库的字符集和字符序，数据库的 Collation 和字符集的详细介绍信息请参见 [数据库级字符集和字符序](https://www.oceanbase.com/docs/community-observer-cn-10000000000902052)。

表创建后，您可以修改表的 Collation 和字符集设置。 语句如下：

```sql
ALTER TABLE table_name [[DEFAULT] CHARACTER SET [=] charset_name] [COLLATE [=] collation_name];

```

OceanBase 数据库中表的 Collation 和字符集的详细介绍信息请参见 [表级字符集和字符序](https://www.oceanbase.com/docs/community-observer-cn-10000000000902053)。

> **注意**
>
>  
>
> 修改表的 Collation 和字符集设置仅影响后续添加的字符类型的列的数据保存方式，已有字符类型的列的数据保存方式不会被修改。

示例如下：

1. 创建表 `tbl1`。

   ```sql
   obclient> CREATE TABLE tbl1 (c1 int, c2 varchar(32), c3 varchar(32), PRIMARY KEY(c1), UNIQUE KEY uk1(c2));

   ```
 2. 修改表的 Collation 和字符集。

   ```sql
   obclient> ALTER TABLE tbl1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;

   ```

   如果表中已有数据，您可以修改表中已有数据的 Collation 和字符集，并将表的 Collation 和字符集也修改为对应的设置。示例如下：

   ```sql
   obclient> ALTER TABLE tbl1 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

   ```

## 更改表结构

OceanBase 数据库支持新增列、修改列及其属性、删除列等。

- 新增列，支持在表中新增列，但不支持直接增加主键列。如果需要增加主键列，建议先增加列后再为列添加主键。添加主键的相关操作请参见 [定义列的约束类型](https://www.oceanbase.com/docs/community-observer-cn-10000000000901401)。

  新增普通列的示例如下：

  ```sql
  obclient> DESCRIBE test;
  +-------+-------------+------+-----+---------+-------+
  | Field | Type        | Null | Key | Default | Extra |
  +-------+-------------+------+-----+---------+-------+
  | c1    | int(11)     | NO   | PRI | NULL    |       |
  | c2    | varchar(50) | YES  |     | NULL    |       |
  +-------+-------------+------+-----+---------+-------+
  2 rows in set

  obclient> ALTER TABLE test ADD c3 int;
  Query OK, 0 rows affected

  obclient> DESCRIBE test;
  +-------+-------------+------+-----+---------+-------+
  | Field | Type        | Null | Key | Default | Extra |
  +-------+-------------+------+-----+---------+-------+
  | c1    | int(11)     | NO   | PRI | NULL    |       |
  | c2    | varchar(50) | YES  |     | NULL    |       |
  | c3    | int(11)     | YES  |     | NULL    |       |
  +-------+-------------+------+-----+---------+-------+
  3 rows in set

  ```
 - 新增列，支持在指定位置新增列。在 `c1` 列后面指定添 `c4` 列，示例如下：

  ```sql
  obclient> ALTER TABLE test ADD COLUMN c4 INT NULL AFTER c1;
  Query OK, 0 rows affected

  obclient> DESC test;
  +-------+-------------+------+-----+---------+-------+
  | Field | Type        | Null | Key | Default | Extra |
  +-------+-------------+------+-----+---------+-------+
  | c1    | int(11)     | NO   | PRI | NULL    |       |
  | c4    | int(11)     | YES  |     | NULL    |       |
  | c2    | varchar(50) | YES  |     | NULL    |       |
  | c3    | int(11)     | NO   |     | NULL    |       |
  +-------+-------------+------+-----+---------+-------+
  5 rows in set

  ```
 - 新增列，支持在指定位置新增列。在 `c1` 列前面指定添 `c6` 列，示例如下：

  ```sql
  obclient> ALTER TABLE test ADD COLUMN c6 INT NULL BEFORE c1;
  Query OK, 0 rows affected

  obclient> DESC test;
  +-------+-------------+------+-----+---------+-------+
  | Field | Type        | Null | Key | Default | Extra |
  +-------+-------------+------+-----+---------+-------+
  | c6    | int(11)     | YES  |     | NULL    |       |
  | c1    | int(11)     | NO   | PRI | NULL    |       |
  | c3    | int(11)     | NO   |     | NULL    |       |
  +-------+-------------+------+-----+---------+-------+
  6 rows in set

  ```

  显示的字段解释如下：

     - `Field` ：字段信息为列名。
     - `Type` ：该列的数据类型。
     - `Null` ：表示该列是否允许为空，`NO` 表示不允许为空，`YES` 表示允许为空。
     - `key` ：字段信息显示为 `PRI` 代表改列为主键列。
 - 修改列属性，支持修改列名称和列类型。

  OceanBase 数据库中 MySQL 模式下列类型的转换规则及详细信息请参见 [列类型变更规则](https://www.oceanbase.com/docs/community-observer-cn-10000000000901357)。。。

  示例如下：

  obclient> ALTER TABLE test CHANGE COLUMN c2 c CHAR(60);
  Query OK, 0 rows affected

  obclient> DESCRIBE test;
  +-------+----------+------+-----+---------+-------+
  | Field | Type     | Null | Key | Default | Extra |
  +-------+----------+------+-----+---------+-------+
  | c1    | int(11)  | NO   | PRI | NULL    |       |
  | c     | char(60) | YES  |     | NULL    |       |
  +-------+----------+------+-----+---------+-------+
  2 rows in set

  ```

  或者您也可以通过以下方式修改列定义。示例如下：

  ```sql
  obclient> ALTER TABLE test MODIFY c2 varchar(60);
  Query OK, 0 rows affected

  obclient> DESCRIBE test;
  +-------+-------------+------+-----+---------+-------+
  | Field | Type        | Null | Key | Default | Extra |
  +-------+-------------+------+-----+---------+-------+
  | c1    | int(11)     | NO   | PRI | NULL    |       |
  | c2    | varchar(60) | YES  |     | NULL    |       |
  +-------+-------------+------+-----+---------+-------+
  2 rows in set

  ```
 - 修改列属性，支持修改列的 `default` 值为 `2`。

  示例如下：

  ```sql
  obclient> DESC test;
  +-------+-------------+------+-----+---------+-------+
  | Field | Type        | Null | Key | Default | Extra |
  +-------+-------------+------+-----+---------+-------+
  | c1    | int(11)     | NO   | PRI | NULL    |       |
  | c2    | varchar(50) | YES  |     | NULL    |       |
  +-------+-------------+------+-----+---------+-------+
  2 rows in set

  obclient> ALTER TABLE test CHANGE COLUMN c2 c2 varchar(50)  DEFAULT 2;
  Query OK, 0 rows affected

  obclient> DESC test;
  +-------+-------------+------+-----+---------+-------+
  | Field | Type        | Null | Key | Default | Extra |
  +-------+-------------+------+-----+---------+-------+
  | c1    | int(11)     | NO   | PRI | NULL    |       |
  | c2    | varchar(50) | YES  |     | 2       |       |
  +-------+-------------+------+-----+---------+-------+
  2 rows in set

  ```

  或者您也可以通过以下方法修改列的默认值。

  语法如下：

  ```sql
  obclient> ALTER [COLUMN] {SET DEFAULT const_value | DROP DEFAULT}

  ```
 - 修改列的 Collation 和字符集。

  如果添加列时，未在各个列的定义中指定列的字符集和字符序，则各个列将默认使用表的字符集和字符序。您可以根据业务需要，修改各个列的 Collation 和字符集设置。

  示例如下：

  obclient> ALTER TABLE tbl1 MODIFY COLUMN c2 varchar(32) COLLATE utf8mb4_bin;

  ```

  OceanBase 数据库中，列的 Collation 和字符集的详细介绍信息请参见 [列级字符集和字符序](https://www.oceanbase.com/docs/community-observer-cn-10000000000902054)。
 - 删除列，支持删除表中的普通列和含索引的列，但不允许删除主键列。

  示例如下：

     - 删除表中的普通列。

      ```sql
      obclient> DESCRIBE test;
      +-------+----------+------+-----+---------+-------+
      | Field | Type     | Null | Key | Default | Extra |
      +-------+----------+------+-----+---------+-------+
      | c1    | int(11)  | NO   | PRI | NULL    |       |
      | c     | char(60) | YES  |     | NULL    |       |
      +-------+----------+------+-----+---------+-------+
      2 rows in set

      obclient> ALTER TABLE test DROP c;
      Query OK, 0 rows affected

      obclient> DESCRIBE test;
      +-------+---------+------+-----+---------+-------+
      | Field | Type    | Null | Key | Default | Extra |
      +-------+---------+------+-----+---------+-------+
      | c1    | int(11) | NO   | PRI | NULL    |       |
      +-------+---------+------+-----+---------+-------+
      1 row in set

      ```
     - 删除表中含索引的列。

      ```sql
      obclient> CREATE TABLE test (c1 int, c2 varchar(32), c3 varchar(32), PRIMARY KEY(c1), INDEX(c2));
      Query OK, 0 rows affected

      obclient> DESCRIBE test;
      +-------+-------------+------+-----+---------+-------+
      | Field | Type        | Null | Key | Default | Extra |
      +-------+-------------+------+-----+---------+-------+
      | c1    | int(11)     | NO   | PRI | NULL    |       |
      | c2    | varchar(32) | YES  | MUL | NULL    |       |
      | c3    | varchar(32) | YES  |     | NULL    |       |
      +-------+-------------+------+-----+---------+-------+
      3 rows in set

      obclient> ALTER TABLE test DROP c2;
      Query OK, 0 rows affected

      obclient> DESCRIBE test;
      +-------+-------------+------+-----+---------+-------+
      | Field | Type        | Null | Key | Default | Extra |
      +-------+-------------+------+-----+---------+-------+
      | c1    | int(11)     | NO   | PRI | NULL    |       |
      | c3    | varchar(32) | YES  |     | NULL    |       |
      +-------+-------------+------+-----+---------+-------+
      2 rows in set

      ```

## 修改索引

OceanBase 数据库支持增加唯一索引和普通索引，同时还支持修改索引的属性。

- 增加唯一索引

  OceanBase 数据库支持在创建表后为表增加唯一索引。如果创建表时同时设置了主键，OceanBase 数据库会默认为主键列创建一个唯一索引。

  增加唯一索引的示例如下：

  ```sql
  obclient> CREATE TABLE test (c1 int PRIMARY KEY, c2 VARCHAR(50));
  Query OK, 0 rows affected

  obclient> ALTER TABLE test ADD UNIQUE INDEX index_name(c2);
  Query OK, 0 rows affected

  ```
 - 增加普通索引

  OceanBase 数据库支持一次增加多个索引，索引关键字用`INDEX`或`KEY`均可以。

  示例如下：

  obclient> ALTER TABLE test ADD INDEX myidx(c1,c2);
  Query OK, 0 rows affected

  ```

  `myidx(c1,c2)` 同时给 `c1`、`c2` 列添加索引， `myidx` 为索引名。
 - 删除索引

  OceanBase 数据库支持删除索引,删除多个索引时用逗号隔开，索引关键字用`INDEX`或`KEY`均可以。

  示例如下：

  ```sql
  obclient> ALTER TABLE test DROP KEY index_name, DROP KEY index_name1;
  Query OK, 0 rows affected

  ```

## 更改表的主键、外键及 Check 约束

OceanBase 数据库支持更改表的主键、外键及 Check 约束，具体操作及详细说明请参见 [定义列的约束类型](https://www.oceanbase.com/docs/community-observer-cn-10000000000901401)。

## 更改表的副本数

- 设置表的副本数为 `2`。

  示例如下：

  ```sql
  obclient> ALTER TABLE test SET REPLICA_NUM=2;
  Query OK, 0 rows affected

  ```

## 重命名表

表创建成功后，您可以更改表名。OceanBase 数据库支持重命名表。

示例如下：

```sql
obclient> ALTER TABLE test RENAME TO t1;

```

或者也可以使用以下语句：

```sql
obclient> RENAME TABLE test TO t1;

```

更多 `ALTER TABLE` 语句的介绍，请参见 [ALTER TABLE]()。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
