1

次の SQL を実行しようとしましたが、応答で errno: 150 'cannot create table path_relations' を受け取りました。MySQL のドキュメントによると、これは FOREIGN KEY の制約に問題があることが原因です。私は何を間違っていますか?

DROP TABLE IF EXISTS `paths`;
DROP TABLE IF EXISTS `path_relations`;

CREATE TABLE `paths` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(256) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `path_relations` (
    `ancestor` int(11) NOT NULL DEFAULT '0',
    `descendant` int(11) NOT NULL DEFAULT '0',
    PRIMARY KEY(`ancestor`, `descendant`),
    FOREIGN KEY(`ancestor`) REFERENCES paths(`id`),
    FOREIGN KEY(`descendant`) REFERENCES paths(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
4

3 に答える 3

4

これがあなたのためのチェックリストです、頑張ってください;)

1) 外部キーのソースと参照フィールドのタイプは同一でなければなりません

2) ソース フィールドと参照フィールドの両方が署名されていない必要があります

3) ソース フィールドにインデックスを付ける必要がある

4) 両方のテーブルが InnoDB である必要があります

于 2012-07-10T13:49:46.830 に答える
3

unsignedにしpaths.id ないとうまくいきませんか?

于 2012-07-10T13:49:04.393 に答える
-1

更新: 最初のテーブルでは、整数値を符号なしとして定義していますが、2 番目のテーブルではそうではありません。外部キーを満たすには、フィールドの構造が同一である必要があります。

テーブルに既にデータがありますか? その場合、すべてのレコードが制約を満たすことを確認してください。外部キー列に NULL 値があると、これが機能しなくなります。

于 2012-07-10T13:48:18.107 に答える