SQLException: невозможно создать таблицу с ошибкой 150 / внешний ключ - PullRequest
1 голос
/ 22 февраля 2012

После некоторого исследования может показаться, что ошибка 150 возникает, когда типы таблиц не совпадают или когда по какой-либо причине создание внешнего ключа завершается неудачно. В любом случае, мой скрипт Create выглядит так:

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 ]

2 голосов
/ 22 февраля 2012

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

1 голос
/ 22 февраля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...