:

  • OceanBase中表主键是否能修改?

不能,因为主键需要用于分布式存储,修改就意味着数据需要重新存储

  • OceanBase中万一因业务需要修改主键怎么办?

重新建表:

  1. 创建表:
create table t1 (
id int,
name varchar(50),
value varchar(50),
primary key(id)
)
  1. 写入测试数据:
insert into t1 values (0,'张三','Z3'),(1,'李四','L4');
  1. 测试直接修改主键:
alter table t1 modify column id int AUTO_INCREMENT;
-- 失败: 1235 - Not supported feature or function
-- 就算表里面没有数据也会失败的
  1. 正确的做法:
-- 主键添加自增
create table t2 (id1 int AUTO_INCREMENT) as select * from t1 ;
alter table t1 rename to t1_bak;
alter table t2 rename to t1;
-- 如果有需要,删除原表数据
-- drop table t1_bak;
-- 换主键
create table t3 (PRIMARY KEY(name)) as select * from t1 ;
alter table t1 rename to t1_bak;
alter table t3 rename to t1;
-- 如果有需要,删除原表数据
-- drop table t1_bak;
Logo

了解最新的技术洞察和前沿趋势,参与 OceanBase 定期举办的线下活动,与行业开发者互动交流

更多推荐