首批通过分布式安全可靠测评,为关键业务系统打造
关于表结构的修改
更新时间:2023-08-03 17:20:32
本文介绍如何在 OceanBase 中 的 MySQL 模式下修改列名、修改表名、修改列类型、增加列、删除列。
前提条件
当前用户需要对表具有 ALTER 权限。
修改列名
语法
ALTER TABLE table_name CHANGE[COLUMN] column_name new_column_name new_column_name_definition;
示例
将 dws_ny 表中的 name1 列改成 name 列。
查看
dws_ny表结构。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将
name1字段改成name字段。ALTER TABLE dws_ny CHANGE name1 name VARCHAR(100);运行后,
dws_ny表中的name1列变为name列。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
修改列类型
语法
ALTER TABLE table_name MODIFY[COLUMN] new_column_name_type;
示例
将 dws_ny 表中的 name 列 varchar 类型长度 (100) 改成 varchar 类型长度 (128) 。
查看
dws_ny表。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 setname列varchar类型长度(100)改成 varchar 类型长度(128)。ALTER TABLE dws_ny MODIFY name VARCHAR(128);运行后,
name列的字段长度从varchar(100)变为varchar(128)。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等)的长度。
增加列
语法
ALTER TABLE table_name ADD[COLUMN] column_name column_type;
示例
在 dws_ny表中,增加 Age 列。
查看 dws_ny 表。
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增加 Age 列。
obclient> ALTER TABLE dws_ny ADD AGE BIGINT; Query OK, 0 rows affected运行后,可在
dws_ny表结构中查看到新增的AGE列。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
删除列
语法
ALTER TABLE table_name DROP[COLUMN] column_name;
示例
在 dws_ny 表中,删除 date 列。
查看
dws_ny表。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删除
date列。obclient> alter table dws_ny drop date; Query OK, 0 rows affected运行后,可在
dws_ny表结构中查看到date列消失。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
修改表名
方式一
语法:
ALTER TABLE table_name RENAME new_table_name;
示例:将 dws_ny 表名改为 dws_ny1。
查看
dws_ny表。obclient> show tables; +--------------+ | Tables_in_ny | +--------------+ | dws_ny | +--------------+ 1 row in set将
dws_ny表名改为dws_ny1。obclient> ALTER TABLE DWS_NY RENAME DWS_NY1; Query OK, 0 rows affected查看运行结果。
obclient> show tables; +--------------+ | Tables_in_ny | +--------------+ | dws_ny1 | +--------------+ 1 row in set
方式二
语法:
RENAME TABLE table_name TO new_table_name;
示例:将 dws_ny1 表名改为 dws_ryxx_ny。
查看 dws_ny1 表。
obclient> show tables; +--------------+ | Tables_in_ny | +--------------+ | dws_ny1 | +--------------+ 1 row in set将 dws_ny1 表名改为
dws_ryxx_ny。obclient> RENAME TABLE DWS_NY1 TO DWS_RYXX_NY; Query OK, 0 rows affected查看运行结果。
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 | 表重命名。 |