2012-03-03 1 views
0

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

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 является PK

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

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

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

Любые идеи? нужно больше информации?

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

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

EDIT: У меня нет полномочий для выполнения SHOW ENGINE INNODB STATUS

+0

Подождите! Кажется, я знаю, что это такое! Я сделал первичный ключ в разделе «Возобновить» (userID, resumeID), поэтому я не могу заставить внешний ключ зависать только от функции resumeID! * Вернемся назад * EDIT: ... dang, я попытался сделать внешний ключ (resumeID, userID), но получил ту же ошибку ... –

+0

'У меня нет привилегий для выполнения SHOW ENGINE INNODB STATUS' Итак, выполните локальную установку, дайте себе это разрешение, воссоздайте проблему и выполните эту команду. –

ответ

0

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

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`) 
+0

Ах! Я вижу! Я следил за тем, что вы сказали, и просто сделал это: CREATE TABLE 'ps5_lwilkins'.' PhoneNumber' ( 'userID' CHAR (25) NOT NULL, ' resumeID' CHAR (30) NOT NULL, 'number' CHAR (45) NOT NULL, ПЕРВИЧНЫЙ КЛЮЧ ('userID',' resumeID', 'number'), FOREIGN KEY (' userID', 'resumeID') ССЫЛКИ' ps5_lwilkins'''Resume' ('userID',' resumeID ') ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; И это сработало! Спасибо! –

+0

@ Сильвер: Добро пожаловать! – ruakh

 Смежные вопросы

  • Нет связанных вопросов^_^