在Oracle 11g中,创建唯一约束时:
alter table abc add constraint uk_name unique (name);然后在该列上创建一个唯一的索引。当一个人放弃这个约束时:
alter table abc drop constraint uk_name;然后,相应的索引也被删除。但是,当索引在约束之前单独创建,稍后创建约束时,约束将正常工作,并使用预先存在的索引,但是..。如上文所述,删除约束时,不会删除索引。
现在,在执行数据库导入索引时,先创建约束,然后删除约束之后,相应的索引就不会被删除--这会导致数据库的不同状态,如果有人写了一些迁移脚本,它们就会留下未删除的索引,这可能会导致错误。有一个可能的解决办法,而不是:
alter table abc drop constraint uk_name;写:
alter table abc drop constraint uk_name keep index;
drop index uk_name;但是,我想知道是否有可能,以及如何通过保留这种约束-索引关系来执行数据库导入?因此,如果在数据库A上认为,在删除约束之后,索引将被自动删除,而不是在导入到数据库B之后,同样的索引应该保持不变。Oracle数据库是如此成熟的技术,应该是可能的,而且不需要麻烦的解决办法,对吗?
编辑:
我发现不是
alter table abc drop constraint uk_name keep index;
drop index uk_name;你只需写:
alter table abc drop constraint uk_name drop index;这是一个不那么丑陋的解决办法。
发布于 2014-05-21 14:49:02
我不想麻烦字典,但这里有一个可定位的标志,可以用来判断索引是否是自动创建的:
http://jonathanlewis.wordpress.com/2012/04/19/drop-constraint/
另一个解决办法是
https://stackoverflow.com/questions/23785265
复制相似问题