經過一番研究,似乎在任何表引擎類型不匹配時或者因任何原因導致外鍵失敗時都會發生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有一個默認值。這是問題嗎?如果是,我該如何設置默認值?如果不是,有人看到代碼有什麼問題嗎?對不起,我不得不稍微混淆它,但是你必須承認,代碼的混淆塊是正確的/不相關的。
剛剛創建
FooTypes
表*捂臉*是的,這會做到這一點,是不是呢?謝謝! – 2012-02-21 21:35:15