错误1215:无法添加外键约束(InnoDB)

时间:2017-02-27 12:05:36

标签: mysql foreign-keys innodb

我正在努力创建一个使用以下查询的外键:

alter table `users` add constraint `users_sales_partner_id_foreign` foreign key (`sales_partner_id`) references `structures` (`sales_partner_id`) on update cascade

InnoDB日志说,它不能匹配这个索引:

  

2017-02-27 10:25:47外键约束错误   table website_backend / users:外键   (sales_partner_id)在更新级联上引用structuressales_partner_id):   在引用的表中找不到引用的索引   列显示为表中的第一列或列类型   引用的表与约束不匹配。

我已经检查过拼写错误和数据类型不兼容,但一切似乎都没问题:

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `profile_id` int(10) unsigned NOT NULL,
  `sales_partner_id` int(11) NOT NULL,
  `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `state` enum('pending','confirmed','active','deactivated') COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `users_profile_id_unique` (`profile_id`),
  UNIQUE KEY `users_sales_partner_id_unique` (`sales_partner_id`),
  UNIQUE KEY `users_email_unique` (`email`),
  CONSTRAINT `users_profile_id_foreign` FOREIGN KEY (`profile_id`) REFERENCES `profiles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

CREATE TABLE `structures` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `sales_partner_id` int(11) NOT NULL,
  `sales_partner_structure` int(11) DEFAULT NULL,
  `active` tinyint(1) NOT NULL,
  `blocked` tinyint(1) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

我无法解决问题,有人有线索吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

感谢Paul Spiegel提醒我,我只能将FK设置为​​索引字段。经过另一次审核后,我注意到我的引用字段没有编入索引,这解决了我的问题。