OB Mysql模式如何为非主键列设置自增

【 使用环境 】 测试环境
【 OB or 其他组件 】ob
【 使用版本 】
【问题描述】想确认一下ob mysql非主键列设自增和主键列设自增的步骤分别是什么,有什么区别
【复现路径】问题出现前后相关操作

1 个赞

@论坛小助手

在OceanBase的MySQL模式下,为非主键列设置自增列的步骤如下:

  1. 创建表时直接定义非主键列为自增列,例如:
CREATE TABLE my_table (
  id BIGINT NOT NULL AUTO_INCREMENT,
  non_pk_id BIGINT NOT NULL AUTO_INCREMENT,
  value VARCHAR(255)
);

注意: 以上SQL语句会导致错误,因为在OceanBase中一张表只能有一个自增列,而且这个自增列通常是主键的一部分。如果想要设置非主键列自增,可以先创建表,然后通过ALTER TABLE语句来实现。

  1. 创建表之后,通过ALTER TABLE语句将非主键列修改为自增列,例如:
obclient> CREATE TABLE tbl1(id bigint(10), non_pk_id bigint(10));
obclient> ALTER TABLE tbl1 MODIFY non_pk_id bigint(10) AUTO_INCREMENT;

区别

  • 主键列自增:主键列自增是OceanBase默认支持的功能,通常用于唯一标识表中的每一行记录。主键自增列是全局唯一的,并且保证全局递增(ORDER模式)。
  • 非主键列自增:非主键列自增需要通过ALTER TABLE语句手动设置。非主键自增列的值同样是全局唯一的,但是在分区内不保证递增(NOORDER模式)。

此外,对于使用自增列作为分区键的分区表,无论是在主键还是非主键上,插入操作都会产生跨机事务,导致性能下降。

详情请参考:

  1. 定义自增列
  2. 列操作
  3. 分区概述
  4. default_auto_increment_mode

日常打卡

1 个赞

6666