Oracle唯一约束和主键不为空
问题描述:
表可以具有主键属性和唯一约束到另一个属性吗?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
答
问:表可以有一个主键属性和一个唯一的约束 另一个属性?
答:是:
一个表可以有不超过一个主键多。
主键可以由多个列(“复合主键”)
任何列可以具有“独特的约束”,无论它是否是一个主键列
甲主键始终是“唯一”,始终有一个“独特的”约束
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
答
除了主键以外,您可以拥有唯一的禁忌,但是该消息表明您已经添加了这样的约束。
是什么'选择INDEX_NAME FROM DBA_INDEXES在表格名= '分支';'说明了什么? – 2012-03-25 21:42:12
我试图放弃它,但不让我失败,原因如下: ORA-02429:无法删除用于强制执行唯一/主键的索引此属性只设置为唯一并且不是主键的一部分,似乎是什么问题,此外,约束似乎处于不可用状态。第1行的错误: ORA-01502:索引'1146815.BRANCH_NAME'或索引的分区是处于不可用状态' – 2012-03-25 22:19:05
尝试删除约束而不是索引。索引是在创建唯一约束时隐式创建的。在最坏的情况下,放下桌子并重新创建它。您先将数据复制到第二个表中备份数据:'将表创建BACKUP_BRANCH作为select * from BRANCH'。 – GolezTrol 2012-03-26 08:32:16