2012-02-21 125 views
1

經過一番研究,似乎在任何表引擎類型不匹配時或者因任何原因導致外鍵失敗時都會發生errno 150。總之,我創建的腳本是這樣的:SQLException:無法創建表errno 150 /外鍵

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 49年1月5日,在默認情況下AFAIK使用InnoDB的)。

所以唯一的區別是Users.fooType有一個默認值。這是問題嗎?如果是,我該如何設置默認值?如果不是,有人看到代碼有什麼問題嗎?對不起,我不得不稍微混淆它,但是你必須承認,代碼的混淆塊是正確的/不相關的。

回答

2

你必須Users之前創建表FooTypes,因爲它使用參考FooTypesFooTypes甚至還存在之前,是指違反外鍵約束,也就是FooTypes(id)必須提供Users(fooType)其參考之前存在。

+0

剛剛創建FooTypes表*捂臉*是的,這會做到這一點,是不是呢?謝謝! – 2012-02-21 21:35:15

1

REFERENCES FooTypes (id)失敗爲否FooTypes找到表,更不用說id列。

解決方案:
Users

相關問題