达梦中组合主键创建的问题

最近在Oracle迁移到达梦中遇到一个组合主键的问题,Oracle中该表已经是组合主键的结构,在迁移的数据到达梦后建立组合主键时报错违反唯一性约束,接下来与大家一起分享下这个问题

构建Oracle中的创建测试表

 oracle中表结构的创建如下
 
 create table test01     
 (
 "ID" int not null,
 "NAME" VARCHAR(20) not null,
 primary key("ID","NAME")
 );
 
 插入两条测试数据
 insert into test01 values (1,'A');
 insert into test01 values (1,'A ');

在Oracle中以上是可以正常执行插入的,接下来使用达梦迁移工具迁移到达梦中

迁移表数据到达梦

使用达梦迁移工具进行迁移
在这里插入图片描述

可以看见在添加主键约束的时候失败了,查看具体的报错为违反唯一性约束

在这里插入图片描述

刚开始遇到这个问题的时候,怀疑是Oracle那边的数据有重复的,于是在Oracle端排查数据是否有重复的问题

select id,name,count(*) from test01 group by id,name having count(*) >1;

并没有发现有重复的数据,于是到达梦这边也使用这条语句进行查询,结果也是没有重复数据

接下来在达梦这边先用同样的语句创建好表结构,在进行迁移数据

先使用语句在达梦中创建好表结构,再迁移数据
 create table test01     
 (
 "ID" int not null,
 "NAME" VARCHAR(20) not null,
 primary key("ID","NAME")
 );

结果还是报错违反唯一性约束,后续仔细检查后发现,问题数据正如同我上面创建的测试数据一样,‘A’ 与 ‘A ’的差别

执行以下sql查询:
select trim(id),trim(name),count(*) from test01 group by trim(id),trim(name) having count(*) >1;

达梦与Oracle中的结果都是一样,证明迁移工具迁移数据时并没有做trim的处理,但在创建主键的时候,达梦中确报错了违反唯一性约束
在这里插入图片描述

将达梦中这条’A’ 与’A ’ 的数据中的一条进行删除后,再次创建主键,成功,问题就出在这两条数据中,第二个’A '中后面接了一个空格,导致达梦中的主键创建失败

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值