2012-03-25 84 views
3

表可以具有主鍵屬性和唯一約束到另一個屬性嗎?Oracle唯一約束和主鍵不爲空

我有以下

CREATE TABLE BRANCH(
BRA_CODE NUMBER NOT NULL PRIMARY KEY, 
BRA_NAME VARCHAR(15), 
BRA_ADDR VARCHAR(30), 
CITY_ID NUMBER); 

和IM嘗試添加

ALTER TABLE BRANCH ADD CONSTRAINT UNIQUE_BRANCH_NAME UNIQUE (BRA_NAME); 

,我碰到下面的錯誤;

ERROR at line 1: 
ORA-02261: such unique or primary key already exists in the table 
+0

是什麼'選擇INDEX_NAME FROM DBA_INDEXES在表格名= '分支';'說明了什麼? – 2012-03-25 21:42:12

+0

我試圖放棄它,但不讓我失敗,原因如下: ORA-02429:無法刪除用於強制執行唯一/主鍵的索引此屬性只設置爲唯一併且不是主鍵的一部分,似乎是什麼問題,此外,約束似乎處於不可用狀態。第1行的錯誤: ORA-01502:索引'1146815.BRANCH_NAME'或索引的分區是處於不可用狀態' – 2012-03-25 22:19:05

+0

嘗試刪除約束而不是索引。索引是在創建唯一約束時隱式創建的。在最壞的情況下,放下桌子並重新創建它。您先將數據複製到第二個表中備份數據:'將表創建BACKUP_BRANCH作爲select * from BRANCH'。 – GolezTrol 2012-03-26 08:32:16

回答

4

問:表可以有一個主鍵屬性和一個唯一的約束 另一個屬性?

答:是:

  • 一個表可以有不超過一個主鍵多。

  • 主鍵可以由多個列(「複合主鍵」)

  • 任何列可以具有「獨特的約束」,無論它是否是一個主鍵列

  • 甲主鍵始終是「唯一」,始終有一個「獨特的」約束

ERROR位於第1行:ORA-02261:例如唯一或主鍵已存在 在表中

答:檢查您的模式。您已經擁有主鍵,並且/或者您已經定義了相同的唯一約束。

例如:

http://www.shutdownabort.com/dbaqueries/Structure_Constraints.php

col type format a10 
col cons_name format a30 
select decode(constraint_type, 
     'C', 'Check', 
     'O', 'R/O View', 
     'P', 'Primary', 
     'R', 'Foreign', 
     'U', 'Unique', 
     'V', 'Check view') type 
, constraint_name cons_name 
, status 
, last_change 
from dba_constraints 
where table_name like 'BRANCH' 
order by 1 
4

除了主鍵以外,您可以擁有唯一的禁忌,但是該消息表明您已經添加了這樣的約束。