【 使用环境 】生产环境
【 OB or 其他组件 】4.2.5长期支持版
【 使用版本 】
【问题描述】执行新增主键sql失败 SQL State : 0A000 Error Code : 1235 Message : Not supported feature or function
【复现路径】执行 alter table t_sensitiveword
add column id
int(11) NOT NULL PRIMARY KEY AUTO_INCREMEN; 报错
【附件及日志】
@论坛小助手
根据您提供的错误信息,您在尝试向已存在的表 t_sensitiveword
添加一个带有自增属性的主键时遇到了错误。错误代码 1235
和错误信息 Not supported feature or function
表明您尝试的操作在当前的 OceanBase 版本中不被支持。
根据文档库中的信息,虽然没有直接提到错误码 1235
,但是根据错误信息可以推测,OceanBase 社区版 4.2.5 长期支持版可能不支持在已有表上直接添加带有 AUTO_INCREMENT
属性的主键列。
解决方案
-
创建新表并迁移数据:
- 创建一个新的表,包含所需的主键列和其他列。
- 将现有表的数据迁移到新表中。
- 删除旧表,重命名新表。
示例 SQL 语句如下:
-- 创建新表 CREATE TABLE t_sensitiveword_new ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, -- 复制其他列 column1 VARCHAR(255), column2 INT, ... ); -- 迁移数据 INSERT INTO t_sensitiveword_new (column1, column2, ...) SELECT column1, column2, ... FROM t_sensitiveword; -- 删除旧表 DROP TABLE t_sensitiveword; -- 重命名新表 RENAME TABLE t_sensitiveword_new TO t_sensitiveword;
-
使用
ALTER TABLE
分步操作:- 先添加一个非主键的自增列。
- 再将该列设置为主键。
示例 SQL 语句如下:
-- 添加非主键的自增列 ALTER TABLE t_sensitiveword ADD COLUMN id INT(11) NOT NULL AUTO_INCREMENT; -- 将该列设置为主键 ALTER TABLE t_sensitiveword ADD PRIMARY KEY (id);
注意事项
- 在生产环境中执行这些操作时,请确保备份数据,以防数据丢失或损坏。
- 如果表中有大量数据,建议在低峰时段进行操作,以减少对业务的影响。
希望这些建议能帮助您解决问题。如果有其他疑问,请随时联系 OceanBase 的人工答疑以获取更多帮助。
检索到的文档如下:
添加主键分步来:
1.先alter添加该字段
2.再alter该字段为表主键
测试了下mysql是可以的,ob确实不兼容,分开来写吧
您好,如果您有新的问题或需要进一步的帮助,请随时告诉我。我会尽力为您提供支持。如果您的问题已经解决,也欢迎分享您的解决方案,以便帮助其他用户。谢谢!
检索到的文档如下:
- 删除资源组
- 删除资源管理计划
- DROP DATABASE
- REMOVE REPLICA
- CANCEL CLONE
- DROP TABLE
- CANCEL REPLICA TASK
- mysql.db
- 并行查询的执行
- 取消租户恢复
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
ALTER TABLE t_user_key
ADD COLUMN sn
varchar(255) NULL COMMENT ‘密钥关联sn’ AFTER state
,
DROP INDEX uk_user_key
,
ADD UNIQUE INDEX uk_user_key
(user_id
, key_ver
) USING BTREE;
这种也不支持,要分开来写,