我正在为我之前创建的数据库添加一项功能。我有一个名为“Test”的表,其中包含有关一系列问题的数据。这个数据可以包含用户添加的一些动态字段,因此我有一个名为Test_Header_Values的表,它将保存有关正在履行哪个标题字段以及它所属的测试的数据。
到目前为止,我创建了两个表,但在创建外键时出现错误1215。我以前有一个错误1005,但我尝试了另一个数据库,它抛出了1215.我已经检查了无数次键入,关系,索引,它应该工作,但我不能完成它。
这里有表格:
CREATE TABLE `test` (
`fk_id_checklist` int(10) unsigned NOT NULL,
`sent_date` date NOT NULL,
`fk_id_user` int(10) unsigned NOT NULL,
`fk_id_user_company` int(10) unsigned NOT NULL,
`start_date` date DEFAULT NULL,
PRIMARY KEY (`fk_id_checklist`,`sent_date`,`fk_id_user`,`fk_id_user_company`),
KEY `fk_user_test_idx` (`fk_id_user`,`fk_id_user_company`),
CONSTRAINT `fk_test_user` FOREIGN KEY (`fk_id_user`, `fk_id_user_company`)
REFERENCES `user` (`id_user`, `fk_id_company`)
ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_test_checklist` FOREIGN KEY (`fk_id_checklist`)
REFERENCES `checklist` (`id_checklist`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `test_header_values` (
`fk_id_checklist` int(10) unsigned NOT NULL,
`fk_sent_date` date NOT NULL,
`fk_id_field` int(10) unsigned NOT NULL,
`fk_id_user` int(10) unsigned NOT NULL,
`fk_id_user_company` int(10) unsigned NOT NULL,
`value` varchar(64) NOT NULL,
PRIMARY KEY (`fk_id_checklist`,`fk_id_field`,`fk_id_user`,`fk_id_user_company`,`fk_sent_date`),
KEY `fk_field_idx` (`fk_id_field`),
KEY `fk_values_test_idx` (`fk_id_checklist`,`fk_sent_date`,`fk_id_user`,`fk_id_user_company`),
CONSTRAINT `fk_values_field` FOREIGN KEY (`fk_id_field`) REFERENCES `fields` (`id_field`)
ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_values_test` FOREIGN KEY (`fk_id_checklist` , `fk_id_user` , `fk_id_user_company` , `fk_sent_date`)
REFERENCES `test` (`fk_id_checklist` , `fk_id_user` , `fk_id_user_company` , `sent_date`)
ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
如果我删除约束fk_values_test
,它就能完美运行。使用此行,它将返回上述错误。
我已经关注this guide以及我在SO上发现的所有问题,但我一直无法找到错误。
答案 0 :(得分:0)
我能够解决问题。
看起来,外键的索引必须具有与约束相同的列顺序,这是我没有找到的指定内容。
将约束更改为`fk_id_checklist` , `fk_id_user` , `fk_id_user_company` , `fk_sent_date`
可解决此错误。