2012-03-25 83 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

除了主键以外,您可以拥有唯一的禁忌,但是该消息表明您已经添加了这样的约束。