1

我有两张表,它们应该通过关系相互连接。我在 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。有人知道天窗吗?

4

1 回答 1

0

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

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

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

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

于 2013-08-20T08:13:00.077 回答