ORA-00001: unique constraint pk_****_key violated oracle imp 语句导入数据对oracle的数据字段操作顺序

最近在将测试环境上sql语句通过flyway migrate 导入产品环境的ORALCE数据库中的时候发现出现的一个unique constrain pk_****_key violated的错误。

在实际检测的时候发现产品环境上的中一个表的主键和索引没有。添加上就好了。

后来发现产生这种现象的原因是因为我在更新测试环境中的数据库的时候,使用的是imp载入的方式,而不是使用impdp。

而通过imp命令载入数据库数据的顺序是:

1.表类型定义

2.表定义

3.表数据

4.表index

5.表约束(Integrity constraints),表视图(views),表过程和触发器(procedures, and triggers

6.位图和域索引(Bitmap, function-based, and domain indexes);

所以在SQL语句中有删除掉主键关联的时候,

如果主键建立的时候用的是一个已经存在的索引(index),那么索引不会被删除。

如果主键建立的时候是系统生成的索引,那么索引也会同时被删除。

那么这个时候如果sql语句中有删除索引语句,就会出错。

所以如果需要有删除主键和索引的操作的话,不要用两句drop 分别删除主键和所用 而是用以下sql语句代替:

ALTER TABLE table_name DROP CONSTRAINT pk_composit_key DROP INDEX;
参考资料:https://stackoverflow.com/questions/33396877/why-didnt-dropping-a-primary-key-also-drop-its-unique-index





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值