CREATE TABLE GRADEINFO(
  ID INT(8) PRIMARY KEY UNIQUE NOT NULL AUTO_INCREMENT,
  SNO INT(8) NOT NULL,
  CNO INT(4) NOT NULL,
  LAST_TIME DATE,
  TIMES INT(4) DEFAULT 1,
  GRADE FLOAT DEFAULT 0,
  CONSTRAINT GRADE_SNO_FK FOREIGN KEY(SNO)
  REFERENCES STUDENTINFO(SNO),
  CONSTRAINT GRADE_CNO_FK FOREIGN KEY(CNO)
   REFERENCES STUDENTINFO(CNO)
  );
在这之前已经在其他的表中定义了SNO,CNO 并且都是主键,然后执行以上报错 说不能创建此表
去掉红色字以后就可以创建了  为什么不能将CNO设为外键呢  求解!!

解决方案 »

  1.   

    外键必须是别的表的主键
    改成
    CONSTRAINT GRADE_CNO_FK FOREIGN KEY(SNO,CNO)
    REFERENCES STUDENTINFO(SNO,CNO)
      

  2.   

    已经在别的表上定义了主键SNO,CNO
    外键一定是别的表的主键
    CONSTRAINT GRADE_CNO_FK FOREIGN KEY(SON,CNO)
    REFERENCES STUDENTINFO(SNO,CNO)
      

  3.   

    CREATE TABLE GRADEINFO(
      ID INT(8)  UNIQUE NOT NULL AUTO_INCREMENT,
      SNO INT(8) NOT NULL,
      CNO INT(4) PRIMARY KEY  NOT NULL,
      LAST_TIME DATE,
      TIMES INT(4) DEFAULT 1,
      GRADE FLOAT DEFAULT 0,
      CONSTRAINT GRADEINFO_SNO_FK FOREIGN KEY(SNO)
      REFERENCES STUDENTINFO(SNO),
    CONSTRAINT GRADEINFO_CNO_FK FOREIGN KEY(CNO)
      REFERENCES STUDENTINFO(CNO));
    CREATE TABLE STUDENTINFO (
    SNO INT(8) PRIMARY KEY NOT NULL,
      CNO INT(4) UNIQUE NOT NULL
    );
    LZ 试试
      

  4.   

    STUDENTINFO你的两个外键都引用自这表,你需要理解外键,并不是他们说的都必须是其他表的主键,但是你要保证他在其他表上的唯一性,比如6楼的虽然不是主键,但是可以肯定它是正确的,你如果用sno  和cno  做联合主键的话,外键时 也必须联合起来,确保他们的唯一性!