无法创建MySql表

时间:2015-12-18 07:48:44

标签: mysql

我创建了这个表

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进行创建,没有手动输入命令,所以它应该可以工作。

非常感谢

2 个答案:

答案 0 :(得分:1)

阅读文件:

  

如果重新创建已删除的表,则必须具有定义   符合引用它的外键约束。它必须   拥有正确的列名和类型,并且必须具有索引   引用的密钥,如前所述。如果不满意,   MySQL返回错误1005并在错误消息中引用错误150,   这意味着没有正确形成外键约束。   同样,如果ALTER TABLE因错误150而失败,则表示a   对于更改的内容,将错误地形成外键定义   表

正如您所看到的,您的第一个表格中包含以下主键:

PRIMARY KEY (`id`,`ops`,`date`)

但在第二个表中,外键是:

FOREIGN KEY (`ops`)

您必须纠正此问题才能使其正常运行。

答案 1 :(得分:1)

您的主键是复合键

  

PRIMARY KEY(idopsdate

您的外键仅由单列组成,即

  

FOREIGN KEY(ops

外键必须与列引用列的主/唯一键匹配。要删除此错误,您需要将iddate添加到 Proposal_Body 表,否则您的第一个表概述主键错误,应该只是是(id)。