我创建了这个表
Appendable
我尝试创建一个具有该
外键的表CREATE TABLE `Overview` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ops` varchar(11) NOT NULL,
`date` date NOT NULL,
`title` text,
`beneficiary_Institution` varchar(100) DEFAULT NULL,
`description` longtext,
`public_Expenditure_Budget` decimal(14,2) DEFAULT NULL,
`payments` decimal(14,2) DEFAULT NULL,
`completition_percent` int(11) DEFAULT NULL,
`start` varchar(11) DEFAULT NULL,
`finish` varchar(11) DEFAULT NULL,
`sub_projects` int(11) DEFAULT NULL,
`public_aid` decimal(14,2) DEFAULT NULL,
`operational_programme_number` int(11) DEFAULT NULL,
`operational_programme` varchar(100) DEFAULT NULL,
`title_ops` text,
`map_coordinates` varchar(15000) DEFAULT NULL,
PRIMARY KEY (`id`,`ops`,`date`)
)ENGINE=InnoDB;
这次以及我试过的任何其他尝试都给了我这个错误
ERROR 1005(HY000):无法创建表格 ' Espa_Projects_Eng.Proposal_Body' (错误:150)
我知道这是一个外键问题,但我看不出原因。这段代码来自mysql客户端,我使用ui进行创建,没有手动输入命令,所以它应该可以工作。
非常感谢
答案 0 :(得分:1)
阅读文件:
如果重新创建已删除的表,则必须具有定义 符合引用它的外键约束。它必须 拥有正确的列名和类型,并且必须具有索引 引用的密钥,如前所述。如果不满意, MySQL返回错误1005并在错误消息中引用错误150, 这意味着没有正确形成外键约束。 同样,如果ALTER TABLE因错误150而失败,则表示a 对于更改的内容,将错误地形成外键定义 表
正如您所看到的,您的第一个表格中包含以下主键:
PRIMARY KEY (`id`,`ops`,`date`)
但在第二个表中,外键是:
FOREIGN KEY (`ops`)
您必须纠正此问题才能使其正常运行。
答案 1 :(得分:1)
您的主键是复合键
PRIMARY KEY(
id
,ops
,date
)
您的外键仅由单列组成,即
FOREIGN KEY(
ops
)
外键必须与列引用列的主/唯一键匹配。要删除此错误,您需要将id
和date
添加到 Proposal_Body 表,否则您的第一个表概述主键错误,应该只是是(id
)。