6

以下のような構造のテーブルがあります。

CREATE TABLE `child_table` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `value` int,
    `ref_id` int,
    PRIMARY KEY (`id`),
    KEY `ref_id` (`ref_id`),
    CONSTRAINT `FK4E9BF08E940F8C98` FOREIGN KEY (`ref_id`) REFERENCES `parent_table` (`id`) ON DELETE CASCADE
)

パーティションを追加するステートメントを実行すると、失敗して次のエラーが表示されます。

ERROR 1217: Cannot delete or update a parent row: a foreign key constraint fails
SQL Statement:
ALTER TABLE `learning`.`child_table`  PARTITION BY HASH(ref_id) PARTITIONS 10

したがって、parent_table で外部制約を削除してから、再度実行します。それでも失敗し、同じエラーが表示されます。

私は何か悪いことをしましたか?

4

2 に答える 2

30

これは古い質問であることは知っていますが、この問題を探してここにたどり着いた人にとっては、最初の Google の結果なので:

MySQL は、分割されたテーブルの外部キーをサポートしていません。

説明書より

パーティション化された InnoDB テーブルでは外部キーがサポートされていません。 InnoDB ストレージ エンジンを使用するパーティション分割されたテーブルは、外部キーをサポートしていません。より具体的には、これは次の 2 つのステートメントが true であることを意味します。

  1. ユーザー定義のパーティショニングを使用する InnoDB テーブルの定義には、外部キー参照を含めることはできません。定義に外部キー参照が含まれる InnoDB テーブルはパーティション化できません。

  2. InnoDB テーブル定義には、ユーザー分割テーブルへの外部キー参照を含めることはできません。ユーザー定義のパーティショニングを使用する InnoDB テーブルには、外部キーによって参照される列を含めることはできません。

于 2014-01-09T16:01:37.047 に答える
1

エラーは、 を参照する別のテーブルの外部キーを参照 child_tableしています。そのテーブルから外部キーを見つけて削除する必要がありますが、必ずしもそうではありませんchild_tableSET foreign_key_checks = 0最初に走ってみることもできます。

于 2013-03-29T04:56:10.777 に答える