无法创建 MySql 表
Posted
技术标签:
【中文标题】无法创建 MySql 表【英文标题】:cant create a MySql table 【发布时间】:2016-03-24 21:00:18 【问题描述】:我已经创建了这个表
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;
我尝试创建一个具有外键的表
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 进行创建,没有手动输入命令,所以它应该可以工作。
非常感谢
【问题讨论】:
见***.com/questions/825362/mysql-error-150-foreign-keys 您是否检查过您的第一个表,即“概览”是否存在于 DB 中? 您可以参考给定的积分here。这可能会对您有所帮助。 我非常确定我可以有一个外键指向一个组合键的 PK!在我的机器上使用相同的mysql,它确实在一段时间前工作了。不知道从那以后我是否改变了一些东西,但现在看来它不允许我进行这样的连接 【参考方案1】:阅读文档:
如果你重新创建一个被删除的表,它必须有一个定义 符合引用它的外键约束。它必须 具有正确的列名和类型,并且必须有索引 引用的键,如前所述。如果这些都不满足, MySQL 返回 Error 1005 并在错误消息中引用 Error 150, 这意味着没有正确形成外键约束。 同样,如果 ALTER TABLE 由于错误 150 而失败,这意味着 更改后的外键定义将被错误地形成 表。
如您所见,您的第一个表具有以下主键:
PRIMARY KEY (`id`,`ops`,`date`)
但在第二个表中,外键是:
FOREIGN KEY (`ops`)
您必须更正此问题才能使其正常工作。
【讨论】:
你是在暗示我不能有一个外键指向裁判表的 PK 之一吗?我以前从未听说过 @SkarosIlias 当然,因为在您的主键中涉及多个字段,因此外键必须匹配。【参考方案2】:你的主键是一个复合键
主键 (
id
,ops
,date
)
你的外键只包含一列,即
外键 (
ops
)
外键必须与它们引用列的主键/唯一键相匹配。要消除此错误,您需要将 id
和 date
添加到 Proposal_Body 表中,或者您的第一个表 Overview 主键错误,应该只是 (@987654327 @)。
【讨论】:
以上是关于无法创建 MySql 表的主要内容,如果未能解决你的问题,请参考以下文章