を追加することはできません、私は次のクエリで外部キーを作成するために、周りに苦労しています:エラー1215:外部キー制約(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のログは、このインデックスを一致させることはできない、と言います。 テーブルwebsite_backend /ユーザの外部キー制約で
2017年2月27日10時25分47秒エラー:更新カスケードの外部キー (
sales_partner_id
)参照structures
(sales_partner_id
): はインデックスが見つかりません。参照タブ第1列またはテーブルの列タイプとして参照された の列が表示され、 参照されたテーブルが制約のために一致しません。
私はすでにタイプミスやデータ型の互換性がないことを確認しましたが、すべてが大丈夫であるように思わ:
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
私は私の問題を得ることができない、誰かが手掛かりを持っていますか?前もって感謝します!
参照する列にはインデックスを付ける必要があります。しかし、(通常)それもユニークでなければなりません。このFKが関係に正しく一致することは確かですか? –
あなたは一意性に関して正しいです:顧客の以前の構造のため、 'sales_partner_id'が'構造体 '内で一意ではないという問題があります。しかし、私はInnoDBがとにかくそれに対処するべきだと思った。 –
なぜFKを定義したいのですか?それは私に合理的な縫い目はありません。構造体(sales_partner_id)に一意でないインデックスを定義すると、それ以降はALTER文が動作します。しかし、私は本当に間違ったことをしようとしていると確信しています。 –