执行新增主键sql失败

【 使用环境 】生产环境
【 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 属性的主键列。

解决方案

  1. 创建新表并迁移数据

    • 创建一个新的表,包含所需的主键列和其他列。
    • 将现有表的数据迁移到新表中。
    • 删除旧表,重命名新表。

    示例 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;
    
  2. 使用 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. 0001 ~ 3999
1 个赞

添加主键分步来:
1.先alter添加该字段
2.再alter该字段为表主键

1 个赞

测试了下mysql是可以的,ob确实不兼容,分开来写吧

您好,如果您有新的问题或需要进一步的帮助,请随时告诉我。我会尽力为您提供支持。如果您的问题已经解决,也欢迎分享您的解决方案,以便帮助其他用户。谢谢!

检索到的文档如下:

  1. 删除资源组
  2. 删除资源管理计划
  3. DROP DATABASE
  4. REMOVE REPLICA
  5. CANCEL CLONE
  6. DROP TABLE
  7. CANCEL REPLICA TASK
  8. mysql.db
  9. 并行查询的执行
  10. 取消租户恢复

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

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;
这种也不支持,要分开来写, :face_exhaling: