新建的表空间,就这一张表。
CREATE TABLE T
(
ID int
);
建完表以后,我想语句创建唯一索引:
ALTER TABLE T add CONSTRAINT CONS134220443 UNIQUE("ID"); --创建失败
ALTER TABLE T add CONSTRAINT CONS13422044 UNIQUE("ID");--创建成功
这是什么莫名其妙的问题,我指明约束名称,有的可以创建,有的不能创建。这个约束名称,有什么命名限制,这好奇怪的问题啊。
数据库版本:1-3-62-2023.11.09-208042-20067-ENT
CONS134220443
INDEX134220443
都是系统名称,不建议用户使用。
具体排查方法如下,如果遇到名称错误的原因,通过
select * from sysobjects where name='CONS134220443'
进行查看,这个ID一定被使用了,而且其父对象一般也已经存在。
select * from sysobjects where id=(select pid from sysobjects where name='CONS134220443')
该问题的逻辑,其实是,我们迁移对象的时候,保持主键迁移后,就不需要再处理主键对应的约束了。因为这两个东西是一个东西,而且主键对应的约束由系统生成,是类型+对象ID
该问题稍微有点绕,但是确实会给大家造成比较大的困扰,大家还是需要理解一下。
改一下参数看看