为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: V7.1.5
【操作系统】:docker
【CPU】: docker
【问题描述】*:
建表语句:
CREATE TABLE "SYSDBA".SCyangzhen
(
"CNO" INT NOT NULL,
"SNO" INT NOT NULL,
"GRADE" INT,
PRIMARY KEY("CNO", "SNO")) ;
PRIMARY KEY("CNO")) ;
其中一个数据库执行
另一个数据库可以执行
都是使用的SYSDBA用户
以下是两个数据库的版本:
我想问一下,什么情况下会出现这种情况??
聚集主键比较特殊,整张表的数据全在这个索引键有序的B+树上。
有两种方法解决。
1)create table xx as select ** 重建表
2)试图取其他唯一性比较好的列替换现有的聚集主键idx1(聚集索引),替换成功后就能删除主键约束,再删除idx1聚集索引。
-- 方法2:操作步骤
-- 1. 建表时不小心把主键搞成聚集主键CLUSTER PRIMARY KEY(c1)
create table id_t (c1 int IDENTITY(50,1) , c2 int , CLUSTER PRIMARY KEY(c1)) ;
-- 2.试图新建基于其他列的聚集索引,顶替原聚集主键
create cluster index idx_1 on id_t(c2);
-- 3.步骤2成功,就可以删除主键约束
alter table id_t drop primary key;
-- 4.删除建的替代的聚集索引,数据库自动恢复rowid的聚集索引键
drop index idx_1;
注意:为了避免同类问题的发生,尽快把数据库参数调整,关闭默认的聚集主键。
sp_set_para_value(1, 'pk_with_cluster', 0);
这是登录的信息