2017-02-27 33 views
0

を追加することはできません、私は次のクエリで外部キーを作成するために、周りに苦労しています:エラー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)参照structuressales_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 

私は私の問題を得ることができない、誰かが手掛かりを持っていますか?前もって感謝します!

+1

参照する列にはインデックスを付ける必要があります。しかし、(通常)それもユニークでなければなりません。このFKが関係に正しく一致することは確かですか? –

+0

あなたは一意性に関して正しいです:顧客の以前の構造のため、 'sales_partner_id'が'構造体 '内で一意ではないという問題があります。しかし、私はInnoDBがとにかくそれに対処するべきだと思った。 –

+1

なぜFKを定義したいのですか?それは私に合理的な縫い目はありません。構造体(sales_partner_id)に一意でないインデックスを定義すると、それ以降はALTER文が動作します。しかし、私は本当に間違ったことをしようとしていると確信しています。 –

答えて

0

私はFKをインデックスフィールドにのみ設定できることを彼が思い出されたPaul Spiegelに感謝します。別のレビューの後、私は参照フィールドがインデックスに登録されていないことに気付き、それが私の問題を解決しました。

関連する問題