我在Oracle中创建一个新的表时设置了主关键字,可是最后一步完成时
却总是提示我说:“ORA-02261:表中已存在这样的唯一关键字或主键”,可是我
并没有设置其他的主键或者是重名的列啊,而且老是出这个问题。把主关键字设置取消掉就没问题了,这是为什么?应该怎么设置主键啊?
附生成的SQL:
CREATE TABLE "SYSTEM"."STUDENT" ("S_ID" VARCHAR2(10) NOT NULL, 
    "PASSWORD" VARCHAR2(12) DEFAULT 000000 NOT NULL, "NAME" 
    VARCHAR2(12) NOT NULL, "SEX" NUMBER(1) DEFAULT 1 NOT NULL, 
    "AGE" NUMBER(3) NOT NULL, "STATE" NUMBER(1) DEFAULT 0 NOT 
    NULL, "ADDRESS" VARCHAR2(50) NOT NULL, "PHONE" VARCHAR2(11) 
    NOT NULL, "MOBILE" VARCHAR2(11) NOT NULL, "EMAIL" 
    VARCHAR2(30) NOT NULL, "REMARK" VARCHAR2(100) NOT NULL, 
    CONSTRAINT "S_ID" PRIMARY KEY("S_ID"), 
    CONSTRAINT "S_ID" UNIQUE("S_ID"))  
    TABLESPACE "BUAASYS" PCTFREE 5 PCTUSED 40 INITRANS 2 
    STORAGE ( INITIAL 24576 NEXT 49152 PCTINCREASE 0)

解决方案 »

  1.   

    CONSTRAINT "S_ID" PRIMARY KEY("S_ID"), 
        CONSTRAINT "S_ID" UNIQUE("S_ID"))  大侠,两个约束的取名相同,应该是不行的吧
    即使可能对应的对象是同意个S_ID
      

  2.   

    我也试过了,把那个改了还是不行。前面那个“S_ID”是Oracle里面的约束条件名,我改了试了一下还是不行……
      

  3.   

    现在大概理解了Oracle的约束条件的概念,然后不用Oracle提供的向导的话可以创建成功!
    估计前面的错误也是因为对Oracle中“约束条件”概念不清楚造成的呵呵……
      

  4.   

    你是在system用户下创建的表,极有可能是系统表pk与你创建的约束条件相斥造成的。
    可以先创建表,然后用alter table add constraint pk_name primary key(col_name ... ) using index,你试一下,语法不一定对。
      

  5.   

    把表里的字段名改一下,象system,table之类的字段名是不能用的
      

  6.   

    创建了主键后,就不要在约束该字段不为空和唯一了,把“CONSTRAINT   "S_ID "   UNIQUE( "S_ID ")” 去掉估计就好了
      

  7.   

    解决办法:
    @Column(nullable = false, unique = true, name = "name")  把 unique 去掉