Mysql错误:150创建,删除字段后它工作

时间:2013-08-20 08:00:57

标签: mysql relational-database

我有两个表应该通过关系相互连接。我在MySQL Workbench中创建了一个模型,但是我收到了一个错误。经过一些测试后,我发现在我看来有些奇怪。

我想要创建的表(失败时使用errno:150):

CREATE TABLE IF NOT EXISTS `info_paginas` (
    `id` INT(10) NOT NULL ,
    `revision` DECIMAL(10,1) NOT NULL ,
    PRIMARY KEY (`id`, `revision`))
ENGINE = InnoDB;

CREATE  TABLE IF NOT EXISTS `pages_roles` (
    `revision` DECIMAL(10,1) NOT NULL ,
    PRIMARY KEY (`revision`),
    CONSTRAINT `fk_pages_roles_info_paginas2`
    FOREIGN KEY (`revision` )
    REFERENCES `info_paginas` (`revision` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB

但是这个查询没问题(我从表info_paginas中删除了PK id):

CREATE TABLE IF NOT EXISTS `info_paginas` (
    `revision` DECIMAL(10,1) NOT NULL ,
    PRIMARY KEY (`revision`))
ENGINE = InnoDB;

CREATE  TABLE IF NOT EXISTS `pages_roles` (
    `revision` DECIMAL(10,1) NOT NULL ,
    PRIMARY KEY (`revision`),
    CONSTRAINT `fk_pages_roles_info_paginas2`
    FOREIGN KEY (`revision` )
    REFERENCES `info_paginas` (`revision` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB

我不知道什么是错的,完全相同的表使用相同的引擎,但只有PK少。有人知道这个芒果吗?

1 个答案:

答案 0 :(得分:0)

您正在尝试将单列外键映射到多列主键 - 这是不可能的。只有当您的外键具有相同的结构时,您才能通过外键映射多个列键 - 即每列的列数和数据类型。

或者,您应该定义单列键,如下所示:

alter table info_paginas add key `byRevision` (`revision`);

然后运行第二个查询(在这种情况下,您将获得将单列键映射到单列键)。