---
title: "更改表 - OceanBase 数据库 V4.2.4 | OceanBase 文档中心"
description: 更改表 表创建成功后，您可以使用 ALTER TABLE 语句对表进行修改。 注意事项 在执行更改表的主键或列类型的操作时，禁止执行其他的 DDL 操作。同时，在执行其他的 DDL 操作时，禁止执行更改表的主键或列类型的操作。 增加、修改和删除列 OceanBase 数据库支持新增列、修改列及其属性、删除列等。 新增…
---
切换语言

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

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

# 更改表

更新时间：2025-01-17 15:11:58

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.4/zh-CN/700.reference/300.database-object-management/200.manage-object-of-oracle-mode/100.manage-tables-of-oracle-mode/600.change-table-of-oracle-mode.md)  

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

## 注意事项

在执行更改表的主键或列类型的操作时，禁止执行其他的 DDL 操作。同时，在执行其他的 DDL 操作时，禁止执行更改表的主键或列类型的操作。

## 增加、修改和删除列

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

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

  新增普通列的示例如下：

  ```sql
  obclient> DESCRIBE test;
  +-------+--------------+------+-----+---------+-------+
  | FIELD | TYPE         | NULL | KEY | DEFAULT | EXTRA |
  +-------+--------------+------+-----+---------+-------+
  | C1    | NUMBER(38)   | NO   | PRI | NULL    | NULL  |
  | C2    | VARCHAR2(50) | YES  | NULL | NULL    | 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    | NUMBER(38)   | NO   | PRI | NULL    | NULL  |
  | C2    | VARCHAR2(50) | YES  | NULL | NULL    | NULL |
  | C3    | NUMBER(38)   | YES  | NULL | NULL    | NULL |
  +-------+--------------+------+-----+---------+-------+
  3 rows in set

  ```
 - 修改列类型。OceanBase 数据库支持多种列类型之间的转换。

  OceanBase 数据库中列类型的转换规则及详细信息请参见 [列类型变更规则](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001036718)。

  修改列类型的 SQL 语法如下：

  ```sql
  ALTER TABLE table_name MODIFY (column_name data_type);

  ```

  示例如下：

  obclient> ALTER TABLE test MODIFY (c2 VARCHAR(70));
  Query OK, 0 rows affected

  obclient> DESCRIBE test;
  +-------+--------------+------+-----+---------+-------+
  | FIELD | TYPE         | NULL | KEY | DEFAULT | EXTRA |
  +-------+--------------+------+-----+---------+-------+
  | C1    | NUMBER(38)   | YES  | NULL | NULL    | NULL |
  | C2    | VARCHAR2(70) | YES  | NULL | NULL    | NULL |
  +-------+--------------+------+-----+---------+-------+
  2 rows in set

  ```
 - 修改列名。示例如下：

  ```sql
  obclient> ALTER TABLE test RENAME COLUMN c1 TO c;
  Query OK, 0 rows affected

  obclient> DESCRIBE test;
  +-------+--------------+------+-----+---------+-------+
  | FIELD | TYPE         | NULL | KEY | DEFAULT | EXTRA |
  +-------+--------------+------+-----+---------+-------+
  | C     | NUMBER(38)   | YES  | NULL | NULL    | NULL  |
  | C2    | VARCHAR2(70) | YES  | NULL | NULL    | NULL  |
  +-------+--------------+------+-----+---------+-------+
  2 rows in set

  ```
 - 修改列的默认值。示例如下：

  ```sql
  obclient> ALTER TABLE test MODIFY c DEFAULT 1;
  Query OK, 0 rows affected

  obclient> DESCRIBE test;
  +-------+--------------+------+-----+---------+-------+
  | FIELD | TYPE         | NULL | KEY | DEFAULT | EXTRA |
  +-------+--------------+------+-----+---------+-------+
  | C     | NUMBER(38)   | YES  | NULL | 1       | NULL  |
  | C2    | VARCHAR2(70) | YES  | NULL | NULL    | NULL  |
  +-------+--------------+------+-----+---------+-------+
  2 rows in set

  ```
 - 修改列的非空约束。示例如下：

  ```sql
  obclient> DESCRIBE test;
  +-------+--------------+------+-----+---------+-------+
  | FIELD | TYPE         | NULL | KEY | DEFAULT | EXTRA |
  +-------+--------------+------+-----+---------+-------+
  | C     | NUMBER(38)   | YES  | NULL | 1       | NULL  |
  | C2    | VARCHAR2(70) | YES  | NULL | NULL    | NULL  |
  +-------+--------------+------+-----+---------+-------+
  2 rows in set

  obclient> ALTER TABLE test MODIFY (c2 NOT NULL);
  Query OK, 0 rows affected

  obclient> DESCRIBE test;
  +-------+--------------+------+-----+---------+-------+
  | FIELD | TYPE         | NULL | KEY | DEFAULT | EXTRA |
  +-------+--------------+------+-----+---------+-------+
  | C     | NUMBER(38)   | YES  | NULL | 1       | NULL  |
  | C2    | VARCHAR2(70) | NO   | NULL | NULL    | NULL  |
  +-------+--------------+------+-----+---------+-------+
  2 rows in set

  ```
 - 删除列，支持删除表中的列，但不允许删除主键列或包含索引的列。示例如下：

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

  obclient> DESCRIBE test;
  +-------+--------------+------+-----+---------+-------+
  | FIELD | TYPE         | NULL | KEY | DEFAULT | EXTRA |
  +-------+--------------+------+-----+---------+-------+
  | C1    | NUMBER(38)   | NO   | PRI | NULL    | NULL  |
  +-------+--------------+------+-----+---------+-------+
  1 rows in set

  ```

## 修改索引

OceanBase 数据库支持为已存在的表增加唯一索引。示例如下：

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

obclient> ALTER TABLE test ADD UNIQUE(c2);

```

## 重命名表

表创建成功后，您可以更改表名。

OceanBase 数据库支持重命名表。示例如下：

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

```

或

```sql
obclient> RENAME test TO t1;

```

## 更改表的主键和外键

创建表后，OceanBase 数据库支持添加或删除表的主键和外键，更改表的主键和外键的具体操作及说明请参见 [定义列的约束类型](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001035385)。

## 更改表的副本数

创建表后，还支持更改表的副本数。

设置表的副本数为 `2` 的示例如下：

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

```

 上一篇 下一篇 ![有帮助](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) 咨询热线
