当通过SQL Developer导出sql脚本时,有多个选项可用,但是无论哪种方式,都必须像这样在主键上生成UNIQUE INDEX

CREATE UNIQUE INDEX "SYS_C0018099" ON "TRANSACTION" ("ID")


并将PRIMARY KEY添加到同一表和同一列

ALTER TABLE "TRANSACTION" ADD PRIMARY KEY ("ID")


所以问题是:看起来像是一种冗余吗?我认为在列上创建主键也应该默认在该列上创建唯一索引吗?那么为什么需要第一个命令呢?

这可能会导致数据冗余吗?

我使用的是Oracle 11g,因此请分享有关为何它应该像上面一样的任何想法。

提前致谢。

最佳答案

没有冗余-或只有一点点:)

第二个命令将使用可用的索引(如果存在)。否则(如果第一个DDL不存在)将创建一个索引。

当您给索引指定了适当的名称并希望保留它时,分成两个命令很有用。

更新:托马斯·哈拉蒂克(Thomas Haratyk)指出的链接是必读的,我真的很喜欢它:http://viralpatel.net/blogs/understanding-primary-keypk-constraint-in-oracle/

UPDATE2:a_horse_with_no_name是正确的,可以在单个语句中完成,例如:

alter table TRANSACTION
add CONSTRAINT pk_test PRIMARY KEY (id);


因此,它将保留名称(不会创建sysblalbla对象名称),如果您使用'USING INDEX'关键字,则可以指定索引属性,例如存储属性。

但是同样,这两个语句不会有任何问题,只创建一个索引。

SQL Developer可能更愿意为每个对象获取一个ddl,并且在某些情况下可能会更好。

07-24 09:38
查看更多