Почему я не могу создать свою таблицу? Почему это ограничение FK искажено? - PullRequest
0 голосов
/ 03 марта 2012

Я получаю сообщение об ошибке ниже, когда пытаюсь создать таблицу с парой внешних ключей. Это происходит гладко, если я только включаю внешний ключ userID, но жалуется, когда я пытаюсь также ввести другой внешний ключ. В чем дело?

ERROR 1005: Can't create table 'ps5_lwilkins.PhoneNumber' (errno: 150)

SQL Statement:

CREATE  TABLE `ps5_lwilkins`.`PhoneNumber` (    
  `userID` CHAR(25) NOT NULL ,
  `resumeID` CHAR(30) NOT NULL ,
  `number` CHAR(45) NOT NULL ,
  PRIMARY KEY (`userID`, `resumeID`, `number`) ,
  INDEX `user_phoneNumber_fk1` (`userID` ASC) ,
  INDEX `resume_phoneNumber_fk3` (`resumeID` ASC) ,
  CONSTRAINT `user_phoneNumber_fk1`
    FOREIGN KEY (`userID` )
    REFERENCES `ps5_lwilkins`.`User` (`userID` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION,
  CONSTRAINT `resume_phoneNumber_fk3`
    FOREIGN KEY (`resumeID` )
    REFERENCES `ps5_lwilkins`.`Resume` (`resumeID` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB

Вот схема для пользователя:

User(userid: CHAR(25), pass: VARCHAR(25)) userid - это ПК

Вот схема для Резюме:

Resume(userID: CHAR(25), resumeID: CHAR(30)

несколько других, не важных атрибутов). PK это (userID, resumeID).

Есть идеи? нужно больше информации?

Глядя на другие проблемы, похожие на эту, я думаю, что это как-то неправильно сформированный FK в resumeID ... но я не вижу где!

Кстати, я попробовал несколько разных имен для ограничения FK.

РЕДАКТИРОВАТЬ: У меня нет привилегии для выполнения SHOW ENGINE INNODB STATUS

1 Ответ

0 голосов
/ 03 марта 2012

Вы на правильном пути с вашим комментарием выше. Вам нужно изменить это:

  INDEX `user_phoneNumber_fk1` (`userID` ASC) ,
  INDEX `resume_phoneNumber_fk3` (`resumeID` ASC) ,

и это:

    FOREIGN KEY (`resumeID` )
    REFERENCES `ps5_lwilkins`.`Resume` (`resumeID` )

к этому:

  INDEX `phoneNumber_fks` (`userID` ASC, `resumeID` ASC) ,

и это:

    FOREIGN KEY (`userID`, `resumeID` )
    REFERENCES `ps5_lwilkins`.`Resume` (`userID`, `resumeID` )
...