OceanBase
  • 产品
  • 解决方案
  • 客户
  • 合作伙伴
  • 资源与服务
  • 文档
  • 社区
云控制台登录 / 注册
  • 免费试用
OceanBase AI 数据平台

基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。

一体化能力

TP 事务处理

关键业务稳定运行,保障数据零丢失

AP 实时分析

事务分析一体,驱动智能决策与运营

AI 现代负载

统一多模态数据,支撑生产级应用

关键产品
OceanBase 分布式数据库

首批通过安全可靠测评,面向关键业务

OceanBase 集中式数据库

集中式架构,兼具性能与成本优势

OceanBase AI 数据库

面向 AI 应用与 Agent 的多模数据库

OceanBase AI 湖库

湖库一体的 AI 多模态数据系统

OceanBase DataPilot

企业级 AI 数据分析 Agent

OceanBase Agentbase

企业级 Agent 后端基础设施

OceanBase OAgent

数据库 AI 运维 Agent

OB Cloud

一体化云数据库,提供多云一致体验

OceanBase 数据库一体机

软硬一体,极致性能与高可靠性保障

OceanBase AI 一体机

开箱即用的 AI 数据库一体机

OMA 迁移评估工具

全链路数据库迁移评估

OMS 数据迁移工具

一站式数据传输与同步

OCP 运维管理工具

数据库全生命周期管理

ODC 开发者工具

数据库开发与管控协同

OAS 自治服务工具

数据库智能诊断与自治

通用场景
全场景业务系统 OLTP
实时分析混合负载
异地多活
多基础设施部署
一站式传统数据库升级
混合云部署
一库多芯软硬件混合部署
分布式数据库单机部署
大存储类数据库降本
冷数据归档降本
多实例资源整合
分库分表一体化升级
高并发场景
数据中台
行业解决方案
国有大行和股份制银行核心系统解决方案
区域性银行核心系统解决方案
寿险核心系统解决方案
产险核心系统解决方案
资管交易类系统解决方案
资管 TA 清算类系统解决方案
运营商核心系统解决方案
人社核心系统解决方案
电力核心系统解决方案
行业专区
银行专区

助力银行完成各类核心业务系统升级

保险专区

寿险、产险核心系统升级的更佳选择

零售专区

助力200+零售行业客户规模化落地

DB 大咖说
OceanBase客户-爱奇艺爱奇艺

百亿级卡券业务的“单库双擎”架构升级

OceanBase客户-四川银行四川银行

800个测试用例选定分布式数据库

OceanBase客户-太平洋保险太平洋保险

先难后易,核心系统数据库升级复盘

行业案例
OceanBase客户-交通银行交通银行

核心数据库的“分布式革命”

OceanBase客户-中国移动中国移动

B域核心CRM&BOSS近乎零改造分布式升级

OceanBase客户-理想理想

打造领先的智能制造系统和自动驾驶体验

演讲实录
OceanBase客户-中国联通中国联通

集团应用分布式数据库覆盖B/O/M域

OceanBase客户-国泰海通国泰海通

智能推送系统稳定支撑单日亿级消息处理量

OceanBase客户-中国联合航空中国联合航空

中国首款机票盲盒背后的数据库力量

用户实践
OceanBase客户-北京银行北京银行

最快速度完成40余套系统国产数据库升级

OceanBase客户-VIVOVIVO

替换 MySQL 分库分表,探索成本效益最优

OceanBase客户-滴滴滴滴

数据库大规模运维体系建设及落地实践

合作伙伴
合作伙伴类型
联合解决方案
产业生态伙伴
经销商伙伴
技术服务伙伴
培训认证伙伴
生态联合解决方案
神州信息 x OceanBase 银行核心系统
长亮科技 x OceanBase 新核心系统
中电金信 x OceanBase 金融分布式核心系统
天阳科技 x OceanBase 贷记卡方案
易诚互动 x OceanBase 手机银行方案
恒生 x OceanBase UF3.0/O45/TA/估值方案
商业发行版
云树®数据库软件 ActionDB
服务
支持与服务
提交工单
软件下载
OceanBase 企业版
OceanBase 社区版
OB Cloud
学习
培训与认证
在线课堂
在线体验
开发者
开发者中心
资料
行业报告与白皮书
官方博客
年度发布会资料
开发者大会资料
oceanbase白皮书

金融核心系统数据库升级路径与场景实践

oceanbase白皮书

人社关键业务数据库一体化升级实践

产品文档
oceanbaseOceanBase 数据库
数据库一体机
oceanbaseOceanBase AI 数据库
工具与组件
oceanbaseOB Cloud 云数据库
驱动和中间件
快速上手
OceanBase 数据库
OB Cloud 云数据库
知识库
汇聚常见产品使用问题案例
在线体验

Demo与实验,感受 OceanBase 的核心能力与应用场景

OceanBase 最佳实践
了解 OceanBase 分布式数据库的架构与系统原理
技术博客

技术解析 | 用户实践 | 社区月报

在线课堂

电子书 |视频课程|在线培训

Developer Hub
应用开发Demo | 数据开发与集成工具
问答论坛

快速答疑 | 常见问题 | 技术交流

社区活动

Meetup | 技术公开课

GitHub

查看源码 | 贡献代码 | 建议反馈

加入社区

社区组织 | 社区用户贡献 |开发者贡献

进入社区首页
oceanbase数据库大赛

第六届OceanBase数据库大赛

oceanbase免费课程

《Easy Data x AI》:面向所有 AI 爱好者的 Data 与 AI 基础知识入门教程

切换语言
  • 中文站 - 简体中文
  • International - English
  • 日本站 - 日本語
文档反馈
  1. 文档中心
  2. OceanBase 数据库
  3. 分布式版
  4. V4.2.5
  5. 参考指南
  6. SQL 参考
  7. SQL 语法
  8. 普通租户(MySQL 模式)
  9. DDL 功能
  10. 列操作
分布式版-V4.2.5LTS
  • V4.2.5 文档更新记录
  • What's New
  • 简介
  • 快速上手
  • 应用开发
  • 部署
  • 升级
  • 数据迁移
  • 管理数据库
  • 参考指南
    • 系统原理
    • 系统管理
    • 数据库对象管理
    • 数据库设计规范和约束
    • SQL 参考
      • SQL 语法
        • 系统租户
        • 普通租户(MySQL 模式)
          • 基本元素
          • 运算符
          • 序列伪列
          • 函数
          • 查询和子查询
          • SQL 语句
          • DDL 功能
            • DDL 功能概述
            • Online DDL 和 Offline DDL 操作
            • 索引操作
            • 主键操作
            • 列操作
            • 生成列操作
            • 外键操作
            • 表操作
            • 分区操作
            • 列类型变更规则
            • NUMBER 类型转换规则
        • 普通租户(Oracle 模式)
      • SQL 实践和建议
      • PL 参考
      • 预留关键字(MySQL 模式)
      • 预留关键字(Oracle 模式)
      • MySQL 租户严格模式下的数据类型转换行为
    • 系统视图
    • 配置项和系统变量
    • 错误码
    • 性能调优
    • 性能测试
    • 数据库代理
    • 驱动
    • 平台产品
    • 组件 & 工具
  • 常见问题
  • 版本发布记录
  • 术语
  1. 文档中心
  2. OceanBase 数据库
  3. 分布式版
  4. V4.2.5
  5. 参考指南
  6. SQL 参考
  7. SQL 语法
  8. 普通租户(MySQL 模式)
  9. DDL 功能
  10. 列操作

列操作

更新时间:2026-07-15 20:42:47

github-fill编辑
编组分享

OceanBase 数据库 MySQL 模式下的列操作包括尾部添加列、非尾部添加列、删除列、重命名列、重排列、修改列类型、管理列的默认值、管理约束、修改自增列值。

添加列

OceanBase 数据库 MySQL 模式下添加列的操作分为 尾部添加列 和 非尾部添加列,下文分别进行介绍。

尾部添加列

在表的尾部添加列的语法如下:

ALTER TABLE table_name ADD COLUMN column_name data_type;

相关参数说明如下:

  • table_name:指定待添加列的表的表名。

  • column_name:指定待添加列的列名。

  • data_type:指定待添加列的数据类型。

此处假设数据库中存在表 tbl1,以在表 tbl1 的尾部添加列 c1 为例介绍如何执行添加列的语句。

  1. 查看表 tbl1 的表结构信息

    obclient> DESCRIBE tbl1;
    

    输出如下,可以看出该表中存在 id、name、age 三列。

    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | NO   | PRI | NULL    |       |
    | name  | varchar(50) | NO   |     | NULL    |       |
    | age   | int(11)     | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    
  2. 在表的尾部添加列 c1,并指定该列的数据类型为 INT

    obclient> ALTER TABLE tbl1 ADD COLUMN c1 INT;
    
  3. 再次查看表 tbl1 的表结构信息

    obclient> DESCRIBE tbl1;
    

    输出如下,可以看出该表的尾部新增了 c1 列。

    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | NO   | PRI | NULL    |       |
    | name  | varchar(50) | NO   |     | NULL    |       |
    | age   | int(11)     | YES  |     | NULL    |       |
    | c1    | int(11)     | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    

非尾部添加列

在表的非尾部添加列的语法如下:

ALTER TABLE table_name 
    ADD COLUMN new_column_name data_type 
    {FIRST | BEFORE | AFTER} column_name;

相关参数说明如下:

  • table_name:指定待添加列的表的表名。

  • new_column_name:指定待添加列的列名。

  • data_type:指定待添加列的数据类型。

  • FIRST | BEFORE | AFTER:指定待添加列的位置,可以添加在表首(FIRST)、 column_name 之前(BEFORE)或 column_name 之后(AFTER)。

    注意

    使用 FIRST 将列添加到表首时,无需设置 column_name,否则会执行报错。

  • column_name:指定与待添加列位置相关的列名。

假设数据库中存在表 tbl1,tbl1 表结构信息如下所示:

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(50) | NO   |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

此处以在 tbl1 表的表首添加 c1 列,name 列前添加 c2 列,name 列后添加 c3 列为例,介绍如何执行添加列的语句。

  1. 在 tbl1 表的表首添加 c1 列,并指定该列的数据类型为 INT

    obclient> ALTER TABLE tbl1 ADD COLUMN c1 INT FIRST;
    
  2. 在 tbl1 表的 name 列前添加 c2 列,并指定该列的数据类型为 VARCHAR

    obclient> ALTER TABLE tbl1 ADD COLUMN c2 VARCHAR(50) BEFORE name;
    
  3. 在 tbl1 表的 name 列后添加 c3 列,并指定该列的数据类型为 VARCHAR,且约束该列不能为空

    obclient> ALTER TABLE tbl1 ADD COLUMN c3 VARCHAR(25) NOT NULL AFTER name;
    
  4. 再次查看 tbl1 表的表结构信息

    obclient> DESCRIBE tbl1;
    

    输出如下,

    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | c1    | int(11)     | YES  |     | NULL    |       |
    | id    | int(11)     | NO   | PRI | NULL    |       |
    | c2    | varchar(50) | YES  |     | NULL    |       |
    | name  | varchar(50) | NO   |     | NULL    |       |
    | c3    | varchar(25) | NO   |     | NULL    |       |
    | age   | int(11)     | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    

删除列

删除列的语法如下:

ALTER TABLE table_name DROP COLUMN column_name

其中,table_name 指定待删除列所在表的表名;column_name 指定待删除列的列名。

假设数据库中存在表 tbl1,tbl1 表结构信息如下所示:

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(50) | NO   |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

此处以删除 name 列为例介绍如何执行删除列的语句。

obclient> ALTER TABLE tbl1 DROP COLUMN name;

删除后再次执行 DESCRIBE tbl1; 命令查看 tbl1 表的表结构,输出如下,表 tbl1 中已无 name 列。

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

删除多列

语法如下:

ALTER TABLE table_name DROP COLUMN column_name1, DROP COLUMN column_name2, ...;

与删除单列相同,table_name 指定待删除列所在表的表名;column_name 指定待删除列的列名。 假设数据库中存在表 tbl1,tbl1 表结构信息如下所示:

+-------+--------------+------+------+---------+-------+
| FIELD | TYPE         | NULL | KEY  | DEFAULT | EXTRA |
+-------+--------------+------+------+---------+-------+
| C1    | NUMBER(30)   | NO   | PRI  | NULL    | NULL  |
| C2    | VARCHAR(50) | YES  | NULL | NULL    | NULL  |
| C3    | NUMBER(30)   | YES  | NULL | NULL    | NULL  |
| C4    | NUMBER(30)   | YES  | NULL | NULL    | NULL  |
| C5    | NUMBER(30)   | YES  | NULL | NULL    | NULL  |
+-------+--------------+------+------+---------+-------+

此处以删除 tbl1 表的中 C4、C5 列为例,介绍如何使用 ALTER TABLE table_name DROP COLUMN column_name1, column_name2, ... 删除表中的多列。

obclient> ALTER TABLE tbl1 DROP COLUMN C4, DROP COLUMN C5;

再次执行 DESCRIBE tbl1; 命令查看 tbl1 表的表结构,输出如下,表 tbl1 中已无 C4、C5 列。

+-------+--------------+------+------+---------+-------+
| FIELD | TYPE         | NULL | KEY  | DEFAULT | EXTRA |
+-------+--------------+------+------+---------+-------+
| C1    | NUMBER(30)   | NO   | PRI  | NULL    | NULL  |
| C2    | VARCHAR(50) | YES  | NULL | NULL    | NULL  |
| C3    | NUMBER(30)   | YES  | NULL | NULL    | NULL  |
+-------+--------------+------+------+---------+-------+

清除废弃列

清除废弃列的语法,如下所示:

ALTER TABLE TABLE_NAME FORCE;

说明

对于 OceanBase 数据库 V4.2.5 版本,从 V4.2.5 BP5 版本开始支持清除废弃列。

此处以清除 tbl1 表的中 C2、C3、C4、C5 列为例,介绍如何清除表中的废弃列。

obclient> ALTER TABLE tbl1 FORCE;

重命名列

重命名列的语法有如下两种:

  • 重命名列的同时修改列的数据类型

    ALTER TABLE table_name CHANGE old_col_name new_col_name data_type;
    

    相关参数说明如下:

    • table_name:指定待重命名的列所在表的表名。

    • old_col_name:指定待重命名的列的列名。

    • new_col_name:指定重命名后列的列名。

    • data_type:指定待重命名的列的数据类型,您可指定为当前数据类型,也可指定将该列修改为其他数据类型,支持修改的数据类型可参见下文 修改列类型。

  • 仅重命名列

    ALTER TABLE table_name RENAME COLUMN old_col_name TO new_col_name
    

    相关参数说明如下:

    • table_name:指定待重命名的列所在表的表名。

    • old_col_name:指定待重命名的列的列名。

    • new_col_name:指定重命名后列的列名。

假设数据库中存在表 tbl1,tbl1 表结构信息如下所示:

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(50) | NO   |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

此处分别以修改 name 列名为 c2、修改 age 列名为 c3,并修改 age 列数据类型为 VARCHAR 为例介绍如何执行重命名列的语句。

  1. 修改 name 列名为 c2

    obclient> ALTER TABLE tbl1 RENAME COLUMN name TO c2;
    
  2. 修改 age 列名为 c3,并修改 age 列数据类型为 VARCHAR

    obclient> ALTER TABLE tbl1 CHANGE age c3 VARCHAR(50);
    
  3. 再次执行 DESCRIBE tbl1; 命令查看 tbl1 表的表结构

    输出如下,tbl1 表中只有 id、c2、c3 三列,且 c3 列的数据类型为 VARCHAR。

    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | NO   | PRI | NULL    |       |
    | c2    | varchar(50) | YES  |     | NULL    |       |
    | c3    | varchar(50) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    

重排列

重排列的语法如下:

ALTER TABLE table_name 
    MODIFY [COLUMN] column_name data_type 
    {FIRST | BEFORE | AFTER} column_name;

相关参数说明如下:

  • table_name:指定待重排列的表的表名。

  • column_name:指定待重排列的列名。

  • data_type:指定待重排列的数据类型,您可指定为当前数据类型,也可指定将该列修改为其他数据类型,支持修改的数据类型可参见下文 修改列类型。

  • FIRST | BEFORE | AFTER:指定待添加列的位置,可以添加在表首(FIRST)、 column_name 之前(BEFORE)或 column_name 之后(AFTER)。

    注意

    使用 FIRST 将列添加到表首时,无需设置 column_name,否则会执行报错。

  • column_name:指定与待重排列位置相关的列名。

假设数据库中存在表 tbl1,tbl1 表结构信息如下所示:

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(50) | NO   |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

此处以将 age 列重排列到 name 列之前,并将 age 列数据类型修改为 VARCHAR 为例介绍如何使用重排列语句。

obclient> ALTER TABLE tbl1 MODIFY COLUMN age VARCHAR(50) BEFORE name;

再次执行 DESCRIBE tbl1; 命令查看 tbl1 表的表结构,输出如下,age 列排列在 name 列之前,并且数据类型为 VARCHAR。

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| age   | varchar(50) | YES  |     | NULL    |       |
| name  | varchar(50) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

修改列类型

OceanBase 数据库所支持的列类型的相关转换如下:

  • 字符类型列的数据类型转换,包括 CHAR、VARCHAR、TINYTEXT、TEXT 和 LONGTEXT。

  • 数值类型列的数据类型转换,包括 TINYINT、SMALLINT、MEDIUMINT、INT 和 BIGINT。

  • 二进制类型的数据类型转换,包括 BINARY、VARBINARY、BLOB、TINYBLOB、MEDIUMBLOB 和 LONGBLOB。

  • 带精度的数据类型支持改变精度,包括 VARCHAR、FLOAT、DOUBLE 和 DECIMAL。

  • 带精度的数据类型之间的转换,包括 FLOAT、DOUBLE 和 DECIMAL。

  • 不同数据类型之间的转换,包括 INT、VARCHAR、DOUBLE、FLOAT 和 DECIMAL。

OceanBase 数据库相关的列类型变更规则,请参考 列类型变更规则。

修改列类型的语法如下:

ALTER TABLE table_name MODIFY [COLUMN] column_name data_type;

相关参数说明如下:

  • table_name:指定待修改类型的列所在表的表名。

  • column_name:指定待修改类型的列的列名。

  • data_type:指定修改后的数据类型。

字符数据类型之间的转换示例

如下所示,创建表 test01:

obclient> CREATE TABLE test01 (c1 INT PRIMARY KEY, c2 CHAR(10), c3 CHAR(10));

以 test01 表为例,结合如下几条示例介绍如何修改字符数据类型列的数据类型并提升长度。

  • 修改 test01 表中 c2 列数据类型为 VARCHAR,并指定长度最大为 20 字符

    obclient> ALTER TABLE test01 MODIFY c2 VARCHAR(20);
    
  • 修改 test01 表中 c2 列数据类型为 VARCHAR,并指定长度最大为 40 字符

    obclient> ALTER TABLE test01 MODIFY c2 VARCHAR(40);
    
  • 修改 test01 表中 c2 列数据类型为 TINYTEXT

    obclient> ALTER TABLE test01 MODIFY c2 TINYTEXT;
    
  • 修改 test01 表中 c2 列数据类型为 LONGTEXT

    obclient> ALTER TABLE test01 MODIFY c2 LONGTEXT;
    
  • 修改 test01 表中 c3 列长度为 20 字符

    obclient> ALTER TABLE test01 MODIFY c3 CHAR(20);
    
  • 修改 test01 表中 c3 列数据类型为 VARCHAR,并指定长度最大为 30 字符

    obclient> ALTER TABLE test01 MODIFY c3 VARCHAR(30);
    

数值数据类型之间的转换示例

整数类型

如下所示,创建表 test02:

obclient> CREATE TABLE test02 (id INT PRIMARY KEY, name VARCHAR(10),age TINYINT, description VARCHAR(65525));

以 test02 表为例,结合如下几条示例介绍如何修改整数类型列的数据类型并提升长度。

  • 修改 test02 表中 age 列数据类型为 SMALLINT

    obclient> ALTER TABLE test02 MODIFY age SMALLINT;
    
  • 修改 test02 表中 age 列数据类型为 INT

    obclient> ALTER TABLE test02 MODIFY age INT;
    
  • 修改 test02 表中 age 列数据类型为 BIGGINT

    obclient> ALTER TABLE test02 MODIFY age BIGGINT;
    

带精度数据类型

如下所示,创建表 test03:

obclient> CREATE TABLE test03(c1 INT, c2 FLOAT(8,2), c3 FLOAT(8,2), UNIQUE(c2, c3));

以 test03 表为例,结合如下几条示例介绍如何修改带精度的数据类型列的数据类型和长度。

  • 修改 test03 表中 c2 列可存储数字位数为 5 位

    obclient> ALTER TABLE test03 MODIFY c2 FLOAT(5,2);
    
  • 修改 test03 表中 c2 列数据类型为 DOUBLE,并设置可以存储总共 10 位数,其中小数部分为 4 位

    obclient> ALTER TABLE test03 MODIFY c2 DOUBLE(10,4);
    
  • 修改 test03 表中 c2 列数据类型为 DOUBLE,并设置可存储数字位数为 5 位,其中小数部分为 2 位

    obclient> ALTER TABLE test03 MODIFY c2 DOUBLE(5,2);
    
  • 修改 test03 表中 c2 列数据类型为 DECIMAL,并设置可以存储总共 20 位数,其中小数部分为 4 位

    obclient> ALTER TABLE test03 MODIFY c2 DECIMAL(20, 4);
    

二进制类型数据类型的转换示例

如下所示,创建表 test04:

obclient> CREATE TABLE test04 (c1 TINYBLOB, c2 BINARY(64));

以 test04 表为例,结合如下几条示例介绍如何修改二进制数据类型列的数据类型和长度。

  • 修改 test04 表中 c1 列数据类型为 BLOB

    obclient> ALTER TABLE test04 MODIFY c1 BLOB;
    
  • 修改 test04 表中 c1 列数据类型为 BINARY,并设置最多可存储 256 字节的数据

    obclient> ALTER TABLE test04 MODIFY c1 BINARY(256);
    
  • 修改 test04 表中 c1 列数据类型为 VARCHAR,并指定长度最大为 256 字符

    obclient> ALTER TABLE test04 MODIFY c1 VARCHAR(256);
    

整数型数据与字符型数据的转换示例

如下所示,创建表 test05:

obclient> CREATE TABLE test05 (c1 INT);
  1. 执行如下命令,将 test05 表中 c1 列数据类型修改为 VARCHAR,并指定长度最大为 64 字符

    obclient> ALTER TABLE test05 MODIFY c1 VARCHAR(64);
    
  2. 执行如下命令,将 test05 表中 c1 列再次修改为 INT 类型

    obclient> ALTER TABLE test05 MODIFY c1 INT;
    

管理列的默认值

OceanBase 数据库 MySQL 模式下可修改、删除列的默认值,本节将分别为您介绍如何操作。

修改列的默认值

未设置的情况下,列的默认值为 NULL,修改列的默认值的语法如下:

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT const_value;

相关参数说明如下:

  • table_name:指定待修改默认值的列所在表的表名。

  • column_name:指定待修改默认值的列的列名。

  • const_value:指定修改后列的默认值。

假设数据库中存在表 tbl1,tbl1 表结构信息如下所示:

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(50) | NO   |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

此处以修改 age 列的默认值为 18 为例介绍如何修改列的默认值。

obclient> ALTER TABLE tbl1 ALTER COLUMN age SET DEFAULT 18;

再次执行 DESCRIBE tbl1; 命令查看 tbl1 表的表结构,输出如下,age 列的默认值为 18。

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(50) | NO   |     | NULL    |       |
| age   | int(11)     | YES  |     | 18      |       |
+-------+-------------+------+-----+---------+-------+

删除列的默认值

删除列的默认值的语法如下:

ALTER TABLE table_name ALTER COLUMN column_name DROP DEFAULT;

其中,table_name 指定待修改默认值的列所在表的表名;column_name 指定待修改默认值的列的列名。

假设数据库中存在表 tbl1,tbl1 表结构信息如下所示:

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(50) | NO   |     | NULL    |       |
| age   | int(11)     | YES  |     | 18      |       |
+-------+-------------+------+-----+---------+-------+

此处以删除 age 列的默认值为例介绍如何删除列的默认值。

obclient> ALTER TABLE tbl1 ALTER COLUMN age DROP DEFAULT;

再次执行 DESCRIBE tbl1; 命令查看 tbl1 表的表结构,输出如下,age 列的默认值为 NULL。

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(50) | NO   |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

管理约束

OceanBase 数据库 MySQL 模式下可为表增加列约束,如修改已有列为自增列、设置列是否可为空、指定列的唯一性等,本节将分别为您介绍如何操作。

管理约束的语法如下:

ALTER TABLE table_name 
    MODIFY [COLUMN] column_name data_type
    [AUTO_INCREMENT] 
    [NULL | NOT NULL] 
    [[PRIMARY] KEY] 
    [UNIQUE [KEY]];

相关参数说明如下:

  • table_name:指定待增加约束的列所在表的表名。

  • column_name:指定待增加约束的列的列名。

  • data_type:指定待修改列的数据类型,您可指定为当前数据类型,也可指定将该列修改为其他数据类型,支持修改的数据类型可参见上文 修改列类型。

  • AUTO_INCREMENT:指定设置选定列为自增列。

  • NULL | NOT NULL:指定设置选定列可以为空(NULL),或不能为空(NOT NULL)。

  • [PRIMARY] KEY:指定设置选定列为主键。

  • UNIQUE [KEY]:指定设置选定列的唯一性。

假设数据库中存在表 tbl1,tbl1 表结构信息如下所示:

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
  1. 将 id 列设置为主键

    obclient> ALTER TABLE tbl1 MODIFY COLUMN id INT PRIMARY KEY;
    
  2. 将 id 列设置为自增列

    obclient> ALTER TABLE tbl1 MODIFY COLUMN id INT AUTO_INCREMENT;
    
  3. 将 name 列设置为不能为空

    obclient> ALTER TABLE tbl1 MODIFY COLUMN name VARCHAR(50) NOT NULL;
    
  4. 将 age 列设置为必须唯一

    obclient> ALTER TABLE tbl1 MODIFY COLUMN age INT UNIQUE;
    
  5. 再次执行 DESCRIBE tbl1; 命令查看 tbl1 表的表结构

    +-------+-------------+------+-----+---------+----------------+
    | Field | Type        | Null | Key | Default | Extra          |
    +-------+-------------+------+-----+---------+----------------+
    | id    | int(11)     | NO   | PRI | NULL    | auto_increment |
    | name  | varchar(50) | NO   |     | NULL    |                |
    | age   | int(11)     | YES  | UNI | NULL    |                |
    +-------+-------------+------+-----+---------+----------------+
    

修改自增列值

修改自增列值的语法如下:

ALTER TABLE table_name [SET] AUTO_INCREMENT = next_value;

此处假设数据库中存在表 tbl1,以修改 tbl1 中自增列值为 12 为例介绍如何修改自增列的列值:

obclient> ALTER TABLE tbl1 AUTO_INCREMENT = 12;

修改后,tbl1 表的下一个自增值将设置为 12,插入新记录时,自增列(例如 c1)将从 12 开始递增。

相关文档

ALTER TABLE

本文目录

添加列尾部添加列非尾部添加列删除列删除多列清除废弃列重命名列重排列修改列类型字符数据类型之间的转换示例数值数据类型之间的转换示例二进制类型数据类型的转换示例整数型数据与字符型数据的转换示例管理列的默认值修改列的默认值删除列的默认值管理约束修改自增列值相关文档
有帮助
无帮助
反馈
AI

OceanBase

OceanBase 海扬数据库始创于 2010 年,是完全自主研发的数据库公司。2020年开始独立商业化运作,历经15年大规模核心场景验证,目前是中国数据库的领军企业之一。从分布式数据库到 AI 数据库,为企业提供安全、稳定、可扩展的数据底座,推动数据基础设施全面拥抱 AI 时代。

关于我们

关于 OceanBase最新动态资质荣誉客户专家委员会招贤纳士合作伙伴年度发布会开发者大会

资源与服务

支持与服务文档知识库软件与工具下载培训与认证在线体验数据库专题视频

社区

快速上手开发者中心博客活动学习问答GitHub

数据库百科

分布式数据库国产数据库OLTP 数据库OLAP 数据库HTAP 数据库数据库向量数据库向量检索

联系我们

服务热线:
400-109-0633
商务咨询
培训认证技术支持媒体合作
京公网安备11010802047223号京公网安备11010802047223号
京ICP备20024574号-1
合字B1.B2-20250395
网站服务协议隐私协议安全响应协议
OceanBase 版权所有 © 2026 基础资源和备案服务由阿里云提供