Код ошибки 1005, состояние SQL HY000: невозможно создать таблицу. Errno: 150 - PullRequest
3 голосов
/ 09 ноября 2011

Я пытаюсь создать таблицу, но скрипт завершается ошибкой, как только мои netbeans выдают ошибку в первой таблице БД.

Как это можно решить?

CREATE TABLE filmy
(
    Film_Id int NOT NULL,
    Nazwa varchar(250),
    Adres varchar(250),
    Data_Utworzenia date,
    Komentarz varchar(250),
    Gat_Id int,
    Sub_Id int,
    Aut_Id int,
    User_Id int,

    Primary Key (Film_Id),
    CONSTRAINT fk_GatFilmy FOREIGN KEY (Gat_Id) REFERENCES gatunek(Gat_Id),
    CONSTRAINT fk_SubFilmy FOREIGN KEY (Sub_Id) REFERENCES subgatunek(Sub_Id),
    CONSTRAINT fk_AutFilmy FOREIGN KEY (Aut_Id) REFERENCES autor(Aut_Id),
    CONSTRAINT fk_UserFilmy FOREIGN KEY (User_Id) REFERENCES users(User_Id)
)

Ответы [ 5 ]

10 голосов
/ 09 ноября 2011

Использовать show innodb status - в выводе (около середины) скрыта секция «ошибка последнего внешнего ключа».Это точно объяснит, почему создание таблицы не удалось.

обычно это происходит из-за того, что ссылочного поля FK не существует (опечатка, неправильная таблица) или существует несоответствие типа поля.FK-связанные поля должны точно соответствовать определениям.Поле char (1) не может быть FK'd для поля char (5) и т. Д.1007 *

1 голос
/ 29 декабря 2011

Вот мое решение:

CREATE TABLE filmy 
( 
    Film_Id           int           NOT NULL, 
    Nazwa             varchar(250)      NULL, 
    Adres             varchar(250)      NULL, 
    Data_Utworzenia   date              DEFAULT '0000-00-00', 
    Komentarz         varchar(250)      NULL, 
    Gat_Id            int               NULL, 
    Sub_Id            int               NULL, 
    Aut_Id            int               NULL, 
    User_Id           int               NULL, 
 Primary Key (Film_Id, Gat_Id, Sub_Id, Aut_Id, User_Id )
) ENGINE=INNODB;

Ограничения по внешнему ключу выполняются после создания gat, sub, aut & user или иначе, если я не знаю, существуют ли две таблицы, чтобы сделать ограничение таблицы реальностью! Попробуйте: alter table filmy добавить ограничение gatfilmy внешний ключ (gat_id) ссылается на gat (gat_id) при обновлении ограничение при удалении ограничение ты должен быть последовательным; или назовите таблицу gat или gatunek, это не может быть и то и другое. Как процессор узнает, что такое gat или gatunek, если вы не определите их обоих? Теперь попробуйте использовать остальные ограничения и помните, что вам нужно создать все таблицы, прежде чем вы сможете их изменить!

CONSTRAINT fk_GatFilmy FOREIGN KEY (Gat_Id) REFERENCES gatunek(Gat_Id), 
CONSTRAINT fk_SubFilmy FOREIGN KEY (Sub_Id) REFERENCES subgatunek(Sub_Id), 
CONSTRAINT fk_AutFilmy FOREIGN KEY (Aut_Id) REFERENCES autor(Aut_Id), 
CONSTRAINT fk_UserFilmy FOREIGN KEY (User_Id) REFERENCES users(User_Id) 
0 голосов
/ 06 сентября 2013

Можно ли использовать это имя таблицы (filmy) по отношению к другой таблице, а затем удалить его.проверьте любое отношение и удалите все, где вы используете это имя таблицы, или измените имя таблицы, например, используйте «filmy1». Я изменил имя таблицы, после чего оно сработало.

Надеюсь, эта работа.

0 голосов
/ 09 ноября 2011

Обычно я получаю эту ошибку, когда пытаюсь добавить внешний ключ для столбца, для которого нет индекса;Я заметил, что ни один из ваших связанных столбцов не показывает в показанном SQL.

0 голосов
/ 09 ноября 2011

Код 150 является ошибкой внешнего ключа.

Одна из указанных таблиц или столбцов не существует (пока, возможно, позже в вашем скрипте) или не соответствует типу / длине / сопоставлению / кодировке. Прокомментируйте их по очереди, чтобы увидеть, какой из них.

Или запустите отдельные ALTER TABLE команды после того, как все ваши CREATE будут выполнены

...