Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中添加外键失败(错误号150)_Mysql_Foreign Keys - Fatal编程技术网

在MySQL中添加外键失败(错误号150)

在MySQL中添加外键失败(错误号150),mysql,foreign-keys,Mysql,Foreign Keys,我读过很多关于在尝试添加外键copnstraint时接收MySQL errno 150的帖子,但是我还没有找到解决方案。我希望我没有做傻事。我做了一个简单的测试用例 两个表都是InnoDB 两个表都是UTF-8 这两列都是int(11)无符号的(使color_id不为NULL不会有任何区别)。(编辑:我错了,这就是解决办法) 这是我的两张桌子: 表小部件: CREATE TABLE `widgets` ( `id` int(11) unsigned NOT NULL AUTO_INCREM

我读过很多关于在尝试添加外键copnstraint时接收MySQL errno 150的帖子,但是我还没有找到解决方案。我希望我没有做傻事。我做了一个简单的测试用例

  • 两个表都是InnoDB

  • 两个表都是UTF-8

  • 这两列都是int(11)无符号的(使color_id
    不为NULL
    不会有任何区别)。(编辑:我错了,这就是解决办法)

    这是我的两张桌子:

  • 小部件

    CREATE TABLE `widgets` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(100) NOT NULL DEFAULT '',
    `color_id` int(11) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    颜色

    CREATE TABLE `colors` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(10) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    我刚刚创建了这些表,没有内容。当我尝试添加外键约束以将widgets.color\u id链接到colors.id时,会发生以下情况:

    mysql> ALTER TABLE `widgets` ADD FOREIGN KEY (`color_id`) REFERENCES `color` (`id`);
    
    ERROR 1005 (HY000): Can't create table 'production.#sql-7b1_2dd7' (errno: 150)
    
    我要补充的是,我也无法使用我选择的GUI工具——OSX上的Sequel Pro。我在尝试创建外键关系时收到相同的错误消息

    显示引擎INNODB状态
    返回以下内容:

    130531 17:23:06 Error in foreign key constraint of table production/#sql-7b1_2c80: 
    FOREIGN KEY (`color_id`) REFERENCES `colors` (`id`): Cannot find an index in 
    the referenced table where the referenced columns appear as the first columns, 
    or column types in the table and the referenced table do not match for constraint.
    

    我是在做一些愚蠢可笑的事情吗???

    color\u id
    不是
    无符号的
    ,并且有一个
    默认的空值
    。列类型必须相同。

    主键和外键之间几乎总是存在类型不匹配的情况

    在大多数情况下,一些提示会有所帮助:

    • 检查您试图关联的表是否使用了支持foring键的引擎,如InnoDB
    • 检查列的类型是否相同且为空。eg(两列必须与类型、类型大小和标志匹配)
    • 检查目标列是否具有索引或主键

    好吧,这回答了这个问题——是的,我愚蠢得可笑。我发誓即使在我发帖的时候我也检查了
    未签名的
    ,但我显然没有。真尴尬。谢谢你。@Raolin这发生在我们最好的人身上。至少你的问题写得很好。干杯,伙计,帮了我大忙;)谢谢你!我正要在stackoverflow上发表文章,直到我发现我的第二栏没有取消署名@NaturalBornCamper很高兴听到这个消息,并且在发现错误方面做得很好。几乎总是这样