2015-12-18 61 views
-1

我创造了这个表不能创建

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; 

一个MySQL表,我试图创建一个具有与

CREATE TABLE `Proposal_Body` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `ops` VARCHAR(11) NULL, 
    `title` VARCHAR(100) NULL, 
    `representative` VARCHAR(45) NULL, 
    `address` VARCHAR(45) NULL, 
    `email` VARCHAR(45) NULL, 
    PRIMARY KEY (`id`), 
    INDEX `fk_Proposal_Body_1_idx` (`ops` ASC), 
    CONSTRAINT `fk_Proposal_Body_1` 
    FOREIGN KEY (`ops`) 
    REFERENCES `espanew`.`Overview` (`ops`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION 
)ENGINE=InnoDB; 

此,任何其他我想给我一个外键的表这个错误

ERROR 1005(HY000):无法创建表 'Espa_Projects_Eng.Proposal_Body'(错误:150)

我知道这是一个外键问题,但我不能看到原因。这段代码是来自mysql客户端的,在那里我使用ui进行了创建,并没有手工输入命令,所以它应该可以工作。

非常感谢

+0

查看http://stackoverflow.com/questions/825362/mysql-error-150-foreign-keys –

+0

你是否检查过你的第一个表格,即“概述”是否存在于数据库中? –

+0

您可以参考[在这里]给出的点(http://stackoverflow.com/questions/11045279/error-1005-hy000-cant-create-table-errno-150)。这可能会帮助你。 –

回答

1

从文档阅读:

如果重新创建已删除的表,它必须有一个定义 符合引用它的外键约束。它必须有 具有正确的列名称和类型,并且它必须具有 引用键索引,如前所述。如果这些不被满足, MySQL将返回错误1005并引用错误消息中的错误150,即 这意味着外键约束未正确形成。 同样,如果ALTER TABLE由于错误150而失败,这意味着 外键定义将不正确地形成于已更改的 表中。

正如你可以看到你的第一个表有此主键:

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

但在第二个表的外键是:

FOREIGN KEY (`ops`) 

你必须纠正这种使它工作。

+0

你是否暗示我不能有一个外部关键点指向表格中的一个PK?我从来没有听说过 –

+0

@SkarosIlias当然,因为在你的主键中有多个字段需要外键匹配。 –

1

主键是复合键

PRIMARY KEY(idopsdate

而且你的外键是仅由单个列的即

FOREIGN KEY(ops

外键必须与它们引用列的主键/唯一键匹配。要删除此错误,您需要将iddate添加到建议_体积表或您的第一个表概述主键是错误的,应该是(id)。