---
title: "关于表结构的修改 | OceanBase 文档中心"
description: "关于表结构的修改 本文介绍如何在 OceanBase 中 的 MySQL 模式下修改列名、修改表名、修改列类型、增加列、删除列。 前提条件 当前用户需要对表具有 ALTER 权限。 修改列名 语法 ALTER TABLE table_name CHANGE[COLUMN] column_name new_column…"
---
切换语言

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

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

# 关于表结构的修改

更新时间：2023-08-03 17:20:32

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V3.1.4/zh-CN/1400.developer-guide/200.create-and-manage-database-objects/600.create-and-manage-tables/500.about-the-modification-of-table-structure.md)  

本文介绍如何在 OceanBase 中 的 MySQL 模式下修改列名、修改表名、修改列类型、增加列、删除列。

## 前提条件

当前用户需要对表具有 ALTER 权限。

## 修改列名

### 语法

```sql
 ALTER TABLE table_name CHANGE[COLUMN] column_name new_column_name new_column_name_definition;

```

### 示例

将 `dws_ny` 表中的 `name1` 列改成 `name` 列。

1. 查看 `dws_ny` 表结构。

   ```sql
   obclient> desc dws_ny;
   +----------+------------------+------+-----+---------+----------------+
   | Field    | Type             | Null | Key | Default | Extra          |
   +----------+------------------+------+-----+---------+----------------+
   | id       | int(10) unsigned | NO   |     | NULL    | auto_increment |
   | name1    | varchar(100)     | NO   |     | NULL    |                |
   | describe | varchar(256)     | NO   |     | NULL    |                |
   | date     | date             | YES  |     | NULL    |                |
   +----------+------------------+------+-----+---------+----------------+
   4 rows in set

   ```
 2. 将 `name1` 字段改成 `name` 字段。

   ```sql
    ALTER TABLE dws_ny CHANGE name1  name VARCHAR(100);

   ```
 3. 运行后，`dws_ny` 表中的 `name1` 列变为 `name` 列。

   ```sql
   obclient> desc dws_ny;
   +----------+------------------+------+-----+---------+----------------+
   | Field    | Type             | Null | Key | Default | Extra          |
   +----------+------------------+------+-----+---------+----------------+
   | id       | int(10) unsigned | NO   |     | NULL    | auto_increment |
   | name     | varchar(100)     | YES  |     | NULL    |                |
   | describe | varchar(256)     | NO   |     | NULL    |                |
   | date     | date             | YES  |     | NULL    |                |
   +----------+------------------+------+-----+---------+----------------+
   4 rows in set

   ```

## 修改列类型

### 语法

```sql
ALTER TABLE table_name MODIFY[COLUMN] new_column_name_type;

```

### 示例

将 `dws_ny` 表中的 `name` 列 `varchar` 类型长度 `(100)` 改成 varchar 类型长度 `(128)` 。

1. 查看 `dws_ny` 表。

   ```sql
   obclient> desc dws_ny;
   +----------+------------------+------+-----+---------+----------------+
   | Field    | Type             | Null | Key | Default | Extra          |
   +----------+------------------+------+-----+---------+----------------+
   | id       | int(10) unsigned | NO   |     | NULL    | auto_increment |
   | name1    | varchar(100)     | NO   |     | NULL    |                |
   | describe | varchar(256)     | NO   |     | NULL    |                |
   | date     | decimal(10,0)    | YES  |     | NULL    |                |
   +----------+------------------+------+-----+---------+----------------+
   4 rows in set

   ```
 2. `name` 列 `varchar` 类型长度 `(100)` 改成 varchar 类型长度 `(128)`。

   ```sql
   ALTER TABLE dws_ny MODIFY name VARCHAR(128);

   ```
 3. 运行后，`name` 列的字段长度从 `varchar(100)` 变为 `varchar(128)`。

   ```sql
   obclient> desc dws_ny;
   +----------+------------------+------+-----+---------+----------------+
   | Field    | Type             | Null | Key | Default | Extra          |
   +----------+------------------+------+-----+---------+----------------+
   | id       | int(10) unsigned | NO   |     | NULL    | auto_increment |
   | name     | varchar(128)     | YES  |     | NULL    |                |
   | describe | varchar(256)     | NO   |     | NULL    |                |
   | date     | date             | YES  |     | NULL    |                |
   +----------+------------------+------+-----+---------+----------------+
   4 rows in set

   ```

   **说明**

   修改列名和列定义，仅支持增加特定字符数据类型（`VARCHAR`、`VARBINARY`、`CHAR` 等）的长度。

## 增加列

### 语法

```sql
ALTER TABLE table_name ADD[COLUMN] column_name column_type;

```

### 示例

在 `dws_ny`表中，增加 `Age` 列。

1. 查看 dws_ny 表。

   ```
 2. 增加 Age 列。

   ```sql
   obclient> ALTER TABLE dws_ny ADD AGE BIGINT;
   Query OK, 0 rows affected

   ```
 3. 运行后，可在 `dws_ny` 表结构中查看到新增的 `AGE` 列。

   ```sql
   obclient> desc dws_ny;
   +----------+------------------+------+-----+---------+----------------+
   | Field    | Type             | Null | Key | Default | Extra          |
   +----------+------------------+------+-----+---------+----------------+
   | id       | int(10) unsigned | NO   |     | NULL    | auto_increment |
   | name     | varchar(128)     | YES  |     | NULL    |                |
   | describe | varchar(256)     | NO   |     | NULL    |                |
   | date     | date             | YES  |     | NULL    |                |
   | AGE      | bigint(20)       | YES  |     | NULL    |                |
   +----------+------------------+------+-----+---------+----------------+
   5 rows in set

   ```

## 删除列

### 语法

```sql
ALTER TABLE table_name DROP[COLUMN] column_name;

```

### 示例

在 `dws_ny` 表中，删除 `date` 列。

   ```
 2. 删除 `date` 列。

   ```sql
   obclient> alter table dws_ny drop date;
   Query OK, 0 rows affected

   ```
 3. 运行后，可在 `dws_ny` 表结构中查看到 `date` 列消失。

   ```sql
   obclient> desc dws_ny;
   +----------+------------------+------+-----+---------+----------------+
   | Field    | Type             | Null | Key | Default | Extra          |
   +----------+------------------+------+-----+---------+----------------+
   | id       | int(10) unsigned | NO   |     | NULL    | auto_increment |
   | name     | varchar(128)     | NO   |     | NULL    |                |
   | describe | varchar(256)     | NO   |     | NULL    |                |
   | AGE      | bigint(20)       | YES  |     | NULL    |                |
   +----------+------------------+------+-----+---------+----------------+
   4 rows in set

   ```

## 修改表名

### 方式一

语法：

```sql
ALTER TABLE table_name RENAME new_table_name;

```

示例：将 `dws_ny` 表名改为 `dws_ny1`。

1. 查看 `dws_ny`表。

   ```sql
   obclient> show tables;
   +--------------+
   | Tables_in_ny |
   +--------------+
   | dws_ny       |
   +--------------+
   1 row in set

   ```
 2. 将 `dws_ny` 表名改为 `dws_ny1`。

   ```sql
   obclient> ALTER TABLE DWS_NY RENAME DWS_NY1;
   Query OK, 0 rows affected

   ```
 3. 查看运行结果。

   ```sql
   obclient> show tables;
   +--------------+
   | Tables_in_ny |
   +--------------+
   | dws_ny1      |
   +--------------+
   1 row in set

   ```

### 方式二

语法：

```sql
RENAME TABLE table_name TO new_table_name;

```

示例：将 `dws_ny1` 表名改为 `dws_ryxx_ny`。

1. 查看 dws_ny1 表。

   ```
 2. 将 dws_ny1 表名改为 `dws_ryxx_ny`。

   ```sql
   obclient> RENAME TABLE DWS_NY1 TO DWS_RYXX_NY;
   Query OK, 0 rows affected

   ```sql
   obclient> show tables;
   +--------------+
   | Tables_in_ny |
   +--------------+
   | dws_ryxx_ny  |
   +--------------+
   1 row in set

   ```

## 参数说明

| **参数** | **描述** |
| --- | --- |
| ADD [COLUMN] | 增加列，支持增加生成列。 **说明** 暂不支持增加主键列。 |
| CHANGE [COLUMN] | 修改列名和列定义，仅支持增加特定字符数据类型（`VARCHAR`、`VARBINARY`、`CHAR` 等）的长度。 |
| MODIFY [COLUMN] | 修改列定义，仅支持增加特定字符数据类型（`VARCHAR`、`VARBINARY`、`CHAR` 等）的长度。 |
| DROP [COLUMN] | 删除列，不允许删除主键列或者包含索引及非空的列。 |
| ALTER INDEX | 修改索引是否可见，当索引状态为 `INVISIBLE` 时，SQL 优化器将不会选择该索引。 |
| RENAME [TO] table_name | 表重命名。 |

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