主键和唯一索引--sql开发人员生成的sql脚本

主键和唯一索引--sql开发人员生成的sql脚本,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,当sql Developer导出sql脚本时,有多个选项可用,但任何一种方法都必须在主键上生成一个唯一索引,如下所示 CREATE UNIQUE INDEX "SYS_C0018099" ON "TRANSACTION" ("ID") 并将主键添加到同一表格和同一列中 ALTER TABLE "TRANSACTION" ADD PRIMARY KEY ("ID") 所以问题是:这看起来像是一种冗余吗?我认为在默认情况下,在列上创建主键也应该在该列上创建唯一的索引?那么为什么第一个命令是必要

当sql Developer导出sql脚本时,有多个选项可用,但任何一种方法都必须在主键上生成一个
唯一索引,如下所示

CREATE UNIQUE INDEX "SYS_C0018099" ON "TRANSACTION" ("ID") 
并将
主键
添加到同一表格和同一列中

ALTER TABLE "TRANSACTION" ADD PRIMARY KEY ("ID")
所以问题是:这看起来像是一种冗余吗?我认为在默认情况下,在列上创建主键也应该在该列上创建唯一的索引?那么为什么第一个命令是必要的呢

这会导致数据冗余吗

我是Oracle 11g的用户,所以请分享一下为什么它看起来像上面这样的想法


提前感谢。

没有冗余,或者只有一点点:)

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

当您为索引指定了正确的名称并希望保留它时,拆分为两个命令非常有用

更新:托马斯·哈拉蒂克(Thomas Haratyk)指出的链接是必读的,我非常喜欢:

UPDATE2:一匹没有名字的马是正确的,它可以在一条语句中完成,如:

alter table TRANSACTION
add CONSTRAINT pk_test PRIMARY KEY (id);
因此,它将保留名称(不会创建sysblalbla对象名称),如果使用“USING INDEX”关键字,则可以指定索引属性,例如存储属性

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


SQL开发人员可能更喜欢为每个对象获取ddl,而且在某些情况下,这样做可能会更好。

阅读本文可能会帮助您感谢英特尔@一匹没有名字的马,你能给出一个单独的陈述,作为两个带有索引名的
的正式组合吗?我的意思是,在创建主键时,我们可以在
altertable
命令中指定索引名吗?Thanks@Dreamer:
alter table foo add constraint pk\u foo主键(id)
将创建名为
pk\u foo的约束和同名索引。如果需要,可以单独定义索引:
alter table foo add constraint pk\u foo primary key(id)using index(为foo上的foo创建索引pk\u index\u))
@a_horse_,没有名字,竖起大拇指,欢迎发表精彩评论!谢谢你一匹没有名字的马)