После некоторого исследования может показаться, что ошибка 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 имеет значение по умолчанию. Это проблема? Если это так, как я могу установить настройки по умолчанию? Если это не так, кто-нибудь еще видит что-то не так с кодом? Извините, мне пришлось слегка запутать его, но вы должны поверить моему слову, что запутанные фрагменты кода верны / не связаны.