经过一番研究,似乎在任何表引擎类型不匹配时或者因任何原因导致外键失败时都会发生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