我有两个表应该通过关系相互连接。我在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少。有人知道这个芒果吗?
答案 0 :(得分:0)
您正在尝试将单列外键映射到多列主键 - 这是不可能的。只有当您的外键具有相同的结构时,您才能通过外键映射多个列键 - 即每列的列数和数据类型。
或者,您应该定义单列键,如下所示:
alter table info_paginas add key `byRevision` (`revision`);
然后运行第二个查询(在这种情况下,您将获得将单列键映射到单列键)。