基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
关于修改表结构
更新时间:2023-07-19 13:03:07
本文介绍如何在 OceanBase 数据库 MySQL 模式下修改表名、修改列名、修改列类型、增加列、删除列。
说明
有关修改表结构的详细信息,请参见 ALTER TABLE。
前提条件
当前用户需要对表具有 ALTER 权限。
示例
创建示例表 tbl1。
obclient [test]> CREATE TABLE tbl1(col1 INT,col2 INT,col3 VARCHAR(50));
Query OK, 0 rows affected
示例一:修改表名
语法:
ALTER TABLE table_name RENAME new_table_name;
#或
RENAME TABLE table_name TO new_table_name;
示例如下:
将表 tbl1 的名称改为 test_tbl1。
obclient [test]> ALTER TABLE tbl1 RENAME test_tbl1;
Query OK, 0 rows affected
obclient [test]> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| test_tbl1 |
+----------------+
1 row in set
示例二:修改列名
语法:
ALTER TABLE table_name CHANGE[COLUMN] column_name new_column_name new_column_name_definition;
示例如下:
将 test_tbl1 表中列 col3 的名称改成 name。
obclient [test]> ALTER TABLE test_tbl1 CHANGE col3 name VARCHAR(50);
Query OK, 0 rows affected
obclient [test]> DESC test_tbl1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| col1 | int(11) | YES | | NULL | |
| col2 | int(11) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set
示例三:修改列类型
语法:
ALTER TABLE table_name MODIFY[COLUMN] new_column_name_type;
说明
修改列名和列定义,仅支持增加特定字符数据类型(
VARCHAR、VARBINARY、CHAR等)的长度。
示例如下:
将 test_tbl1 表中列 col2 的数据类型从 INT(11) 转换为 INT(18)。
obclient [test]> ALTER TABLE test_tbl1 MODIFY col2 INT(18);
Query OK, 0 rows affected
obclient [test]> DESC test_tbl1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| col1 | int(11) | YES | | NULL | |
| col2 | int(18) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set
示例四:增加列
语法:
ALTER TABLE table_name ADD[COLUMN] column_name column_type;
说明
暂不支持增加主键列。
示例如下:
在 test_tbl1 表中,增加 col4 列。
obclient [test]> ALTER TABLE test_tbl1 ADD col4 char(1);
Query OK, 0 rows affected
obclient [test]> DESC test_tbl1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| col1 | int(11) | YES | | NULL | |
| col2 | int(18) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| col4 | char(1) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set
示例五:删除列
语法:
ALTER TABLE table_name DROP[COLUMN] column_name;
说明
删除列时,不允许删除主键列或者包含索引及非空的列。
示例如下:
在 test_tbl1 表中,删除 col4 列。
obclient [test]> ALTER TABLE test_tbl1 DROP col4;
Query OK, 0 rows affected (0.036 sec)
obclient [test]> DESC test_tbl1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| col1 | int(11) | YES | | NULL | |
| col2 | int(18) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set