MySQL 错误 1005 错误号。 150 个带主键

标签 mysql sql foreign-keys innodb

我正在向之前创建的数据库添加一项功能。我有一个名为“测试”的表,其中包含有关一系列问题的数据。此数据可以包含用户添加的许多动态字段,因此我有一个名为 Test_Header_Values 的表,它将保存有关正在履行哪个 header 字段及其所属测试的数据。

到目前为止一切顺利,我已经创建了两个表,但在创建外键时出现错误 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 上找到的所有问题,但我一直无法找到错误。

最佳答案

我已经能够解决这个问题了。

看起来,外键的索引必须与约束具有相同的列顺序,这是我没有发现指定的。

将约束更改为 `fk_id_checklist` , `fk_id_user` , `fk_id_user_company` , `fk_sent_date`解决了这个错误。

关于MySQL 错误 1005 错误号。 150 个带主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24600864/

相关文章:

sql - 使用 SQL Server 更新 XML 列的单个 XML 节点值

postgresql - Postgres : Are Nested Foreign Keys allowed?

mysql - 可能由其他相同实体组成的实体的数据库设计

mysql - 插入时自动用外键替换值

mysql - 使用 MySQL 中的 View 维护 HIPAA 合规性

Mysql左连接获取唯一主题

java - JOOQ:根据其长度将 tinyint 映射到 boolean

sql - 使用 codeigniter 和 ajax 检查数据库中是否存在用户名

mysql - 让 MySQL 在 CentOs 5 上运行

python - 使用Python将CSV数据加载到MySQL中,创建表并添加记录