2012-02-21 2 views
1

После выполнения некоторых исследований, кажется, что errno 150 возникает, когда типы файлов таблиц не совпадают, или при возникновении неполадок при создании внешнего ключа. Во всяком случае, мой Создать скрипт выглядит следующим образом:SQLException: Невозможно создать таблицу errno 150/foreign key

CREATE TABLE IF NOT EXISTS Users 
(
    id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    fooType INT UNSIGNED NOT NULL DEFAULT 0, 
    ...More columns, nothing special... 
    PRIMARY KEY (`id`), 
    CONSTRAINT Users_fooType_fk 
     FOREIGN KEY (fooType) 
     REFERENCES FooTypes (id) 
     ON DELETE CASCADE 
) ENGINE = InnoDB# 

CREATE TABLE IF NOT EXISTS FooTypes 
(
    id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    ...More columns, nothing special... 
    PRIMARY KEY (`id`) 
) ENGINE = InnoDB# 

Итак, мои настольные двигатели соответствуют как явно и неявно (я использую MySQL 5.1.49, который использует InnoDB по умолчанию AFAIK).

Таким образом, единственное отличие заключается в том, что у Users.fooType есть значение по умолчанию. Это проблема? Если это так, как мне настроить значение по умолчанию? Если это не так, никто не видит ничего плохого в коде? Извините, мне пришлось немного запутать его, но вы должны смириться с этим, что обфусканные куски кода верны/не связаны.

ответ

2

Вы должны создать таблицу FooTypes перед тем Users, как он использует ссылку из FooTypesFooTypes еще до того, существует, означает нарушение ограничения внешнего ключа, то есть FooTypes(id) должен быть существовать, прежде чем предоставить Users(fooType) свою ссылку.

+0

* Facepalm * Да, что бы это сделать, не будет тогда? Благодаря! –

1

REFERENCES FooTypes (id) не работает FooTypes найденные таблицы, не говоря уже id column.

Решение:
Просто создайте FooTypes таблицу перед Users

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