---
title: 通过 ALTER TABLE 为表添加主键报错 -OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于通过 ALTER TABLE 为表添加主键报错 相关的常见问题和使用技巧，帮助您快速解决通过 ALTER TABLE 为表添加主键报错 的难题。
---
切换语言

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

划线反馈

# 通过 ALTER TABLE 为表添加主键报错

更新时间：2023-12-07 03:16

适用版本： V2.2.x、V3.1.x、V3.2.x 内容类型：Troubleshoot  

本文介绍通过 ALTER TABLE 为表添加主键报错的原因以及解决方法。

## 适用版本

OceanBase 数据库 V2.x 和 V3.x 版本

## 通过修改表的方式添加主键

OceanBase 数据库的每一张表都有主键，并在内部以主键为序组织数据。如果在创建用户表时不显式指定主键，系统会自动为表生成隐藏主键，隐藏主键不可被查询。有关隐藏主键的详细信息，请参见 [OceanBase 数据库的无主键表介绍](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000000125)。

目前，OceanBase 数据库不支持通过 `ALTER TABLE` 语句为表添加主键，例如：

```unknow
obclient> CREATE TABLE t0( id int NOT NULL, name VARCHAR(20));
obclient> ALTER TABLE t0 ADD CONSTRAINT pk PRIMARY KEY(id);

```

以上 SQL 执行会报错。

- 对于 Oracle 模式，错误信息如下。

  ```unknow
  ORA-00600: internal error code, arguments: -4007, Not supported feature or function

  ```
 - 对于 MySQL 模式，错误信息如下。

  ```unknow
  ERROR 1235 (0A000): Not supported feature or function

  ```

因此，如果您需要修改数据表的主键，可以创建一张新表并指定主键，然后将数据迁移到新表中。

上一篇

[Oracle 租户下使用虚拟列报 ORA-12899: value too large for column](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000298689)

下一篇

[OceanBase 数据库不支持主键字段的类型修改，使用 OMS 来辅助完成](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207742) ![有帮助](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) 咨询热线
