【 使用环境 】 测试环境
【 OB or 其他组件 】ob
【 使用版本 】
【问题描述】想确认一下ob mysql非主键列设自增和主键列设自增的步骤分别是什么,有什么区别
【复现路径】问题出现前后相关操作
1 个赞
在OceanBase的MySQL模式下,为非主键列设置自增列的步骤如下:
- 创建表时直接定义非主键列为自增列,例如:
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
语句来实现。
- 创建表之后,通过
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 个赞
6666