Sql ORA-02264:现有约束已使用的名称

Sql ORA-02264:现有约束已使用的名称,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我正在处理SQL,在创建表时遇到了一个问题! 这是我的密码: CREATE TABLE Voucher_Types ( ID Number(3, 0), Abbreviation VarChar(2), Voucher_Type VarChar(100), EntryBy VarChar(25), EntryDate Date, CONSTRAINT ID_PK Primary Key(ID) ); 我得到以下错误, ORA-02264:现有约束

我正在处理SQL,在创建表时遇到了一个问题! 这是我的密码:

CREATE TABLE Voucher_Types
(
    ID Number(3, 0),
    Abbreviation VarChar(2),
    Voucher_Type VarChar(100),
    EntryBy VarChar(25),
    EntryDate Date,
    CONSTRAINT ID_PK Primary Key(ID)
);
我得到以下错误,
ORA-02264:现有约束已使用名称
我正在使用Oracle10g

我目不转睛地看了看,发现了一些话题,但它们对我没有帮助,有人能帮我解决这个问题吗!提前谢谢

您有另一个表,该表已被名称
ID\u PK
约束

如果您想知道它是哪张表,您可以试试

select owner, table_name from dba_constraints where constraint_name = 'ID_PK';
很可能,您复制了
create table
语句,但没有更改主键的约束名称

通常认为在约束的名称中包含表名是一种很好的做法。一个原因正是为了防止这种“错误”

因此,在您的情况下,您可以使用

CREATE TABLE Voucher_Types
(
   ... 
   CONSTRAINT Voucher_Types_PK Primary Key(ID)
);

更新为什么同一约束名称不能使用两次?(根据您在评论中的问题):这正是因为它是标识约束的名称。如果您在运行的系统中违反了某个约束,您需要知道它是哪个约束,因此需要一个名称。但是,如果此名称可以引用多个约束,则该名称没有特殊用途。

错误消息告诉您,您的架构中已经有另一个名为ID\u PK的约束-只需使用另一个名称,您就可以了:

CREATE TABLE Voucher_Types
(
    ID Number(3, 0),
    Abbreviation VarChar(2),
    Voucher_Type VarChar(100),
    EntryBy VarChar(25),
    EntryDate Date,
    CONSTRAINT VOUCHER_TYPES_ID_PK Primary Key(ID)
);
要查找有问题的约束,请执行以下操作:

SELECT * FROM user_constraints WHERE CONSTRAINT_NAME = 'ID_PK'

这意味着有一个名为ID_PK try with的约束
约束凭证\u类型\u ID\u主键(ID)
例如

您可以使用检查是否存在

select * from user_constraints where upper(constraint_name) = 'ID_PK';


弗兰克·施密特的安瑟很好。 但是,对于约束的名称,也可以使用表别名作为约束名称的一部分。 约束的名称类似于:vte_pk。并且没有必要在约束名称中调用相关列的名称。 如果主键超过2(或更多)列怎么办


因此,
。。。约束VTE_PK主键(ID).

您在其他表中有相同的约束名称 您需要更改约束名称

如果要查看使用此约束的表名 您可以看到以下查询:


从user_constraints中选择表_name、constraint_name,其中lower(constraint_name)='id_pk'

谢谢大家的回答!我理解这个问题,但我有一个问题:为什么没有两个表具有相同的约束名称,即使它们彼此没有关系。。!!好的,谢谢!现在我明白了。。!!谢谢你的回复。。!!
select * from all_constraints where upper(constraint_name) = 'ID_PK';