2012-07-12 89 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