2013-12-06 3 views
2

Долгосрочный пользователь, первый раз постер.ОШИБКА: Ошибка 1005: Не удается создать таблицу (errno: 150)

Я пытаюсь создать базу данных для присвоения университета, и я получаю выше код ошибки (ОШИБКА: Ошибка 1005: Не удается создать таблицу «mydb.songs» (ошибка: 150))

I проверили, чтобы все fk и Pk были одинаковыми. Все таблицы также должны быть одного типа.

Может ли кто-нибудь помочь?

Благодаря

Executing SQL script in server ERROR: Error 1005: Can't create table 'mydb.songs' (errno: 150)

CREATE TABLE IF NOT EXISTS `mydb`.`Songs` (
    `SongId` INT NOT NULL, 
    `SongTitle` VARCHAR(45) NULL, 
    `SongLength` VARCHAR(45) NULL, 
    `ProductionDate` VARCHAR(45) NULL, 
    `Author` VARCHAR(45) NULL, 
    `Price` VARCHAR(45) NULL, 
    `AuthorId` INT NULL, 
    `Musicians_MusicianId` INT NOT NULL, 
    `Instruments_InstrumentId` INT NOT NULL, 
    `MediaFiles_MediaId` INT NOT NULL, 
    PRIMARY KEY (`SongId`, `Musicians_MusicianId`, `Instruments_InstrumentId`, `MediaFiles_MediaId`), 
    INDEX `fk_Songs_Musicians1_idx` (`Musicians_MusicianId` ASC), 
    INDEX `fk_Songs_Instruments1_idx` (`Instruments_InstrumentId` ASC), 
    INDEX `fk_Songs_MediaFiles1_idx` (`MediaFiles_MediaId` ASC), 
    CONSTRAINT `fk_Songs_Musicians1` 
    FOREIGN KEY (`Musicians_MusicianId`) 
    REFERENCES `mydb`.`Musicians` (`MusicianId`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_Songs_Instruments1` 
    FOREIGN KEY (`Instruments_InstrumentId`) 
    REFERENCES `mydb`.`Instruments` (`InstrumentId`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_Songs_MediaFiles1` 
    FOREIGN KEY (`MediaFiles_MediaId`) 
    REFERENCES `mydb`.`MediaFiles` (`MediaId`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB 

SQL выполнение скрипта завершен: заявления: 18 удалось, 1 не удалось

Извлечение назад определения представлений в окончательном виде. Ничто принести

+0

Был ли еще на это сообщение об ошибке? Обычно это дает повод? –

+0

Покажите нам другие таблицы. –

+0

Использует ли пользователь этот сценарий как соответствующие разрешения для 'mydb'? –

ответ

0

С MySQL Docs (Ref):

In the event of a foreign key error involving InnoDB tables (usually Error 150 in the MySQL Server), you can obtain a detailed explanation of the most recent InnoDB foreign key error by checking the output of SHOW ENGINE INNODB STATUS.

Используя выше, не видя DDL для других таблиц в явной форме:

Проблема не одна из следующих, если я пропустил что-то, копируя то, что вы пытаетесь сделать, не видя своих других таблиц.

  1. Вы либо несоответствие типов данных в одном из ссылочных FKS (т.е. INT FK ON CHAR)

    и/или

  2. Одним из ссылочных ФКС не является первичным ключом или индекс в таблице , оба сценария будет производить заблуждаться 150.

  3. InnoDB permits a foreign key to reference any index column or group of columns. However, in the referenced table, there must be an index where the referenced columns are listed as the first columns in the same order.

    Reference from MySQL manual

Смотрите ниже скрипку с рабочими версиями всех таблиц/выписке, чтобы сравнить свои таблицы DDL с

SQLFiddle with Working DDL

+0

Спасибо.Я думаю, проблема в том, что у меня уже была таблица с тем же именем. (это вызовет эту ошибку). Я сбросил все остальные базы данных и таблицы, и это сработало. – user3075549

+0

@ user3075549 - Нет, что бы не вызвало ошибку. Если таблица существует уже, то запрос будет выполняться и возвращать 0 строк (успех), потому что '... ЕСЛИ НЕ СУЩЕСТВУЕТ' проверяет, существует ли таблица, и если это произойдет, из нее будет изящно выйти. Вероятно, у вас была проблема №2/№3 (а не индекс/ПК) и она была решена, добавив те индексы, которые вы упомянули, добавив в свое решение. – cerd

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