2012-07-12 91 views
1

我想从复合主键中删除一列(而不是从表中删除)。如果我的桌子是这样的。从复合主键中删除一列

create table "scott"."xyz"(
    "column1" not null, 
    "column2" not null, 
    "column3" not null, 
    "column4" not null, 
    "column5" not null, 
    "column6", 
    CONSTRAINT PRIMARY KEY ("column1","column2","column3","column4") 
); 

我想将此主键更改为前三列而不丢弃它。因为我不知道CONSTRAINT的名字。

+1

_请不要使用表格和列名称。这太混乱了,意味着你必须在任何地方明确地引用它们。如果您没有引用任何内容,那么您不必引用任何内容(只要您不使用保留字)。 – Ben 2012-07-12 08:09:10

回答

3

你不需要约束名称:

ALTER TABLE "scott"."xyz" DROP PRIMARY KEY; 
ALTER TABLE "scott"."xyz" ADD PRIMARY KEY ("column1","column2","column3"); 

但它可能是一个好主意,让你PK的名称在未来:

ALTER TABLE "scott"."xyz" 
    ADD CONSTRAINT pk_xyz PRIMARY KEY ("column1","column2","column3"); 

而且我也不会推荐使用带引号的标识符。从长远来看,您会遇到各种工具的问题。

+0

AM我需要删除索引 – mallikarjun 2012-07-12 07:17:29

+0

@mallikarjun:Oracle会自动删除相应的索引。有关更多详细信息,请参阅手册:http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_3001.htm#i2103845 – 2012-07-12 07:19:47

+0

我丢弃了主键,但是如果我通过将column1添加到此表中新的主键和第2列正在获取主键违规错误。我知道我的表与这些列有重复的数据。如何找到这样的专栏 – mallikarjun 2012-07-13 05:42:41