同じテーブルへの MySQL 外部キーがエラー 1005、エラー番号 150 で失敗しました

StackOverflow https://stackoverflow.com/questions/2317947

質問

mysql> ALTER TABLE category ADD CONSTRAINT category_parent_category_id FOREIGN KEY (parent) REFERENCES category(id);
ERROR 1005 (HY000): Can't create table 'sfnews.#sql-244_1' (errno: 150)

DDL は次のようになります。

Create Table: CREATE TABLE `category` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `parent` bigint(20) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  KEY `parent_idx` (`parent`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

なぜ間違っているのでしょうか?

役に立ちましたか?

解決

自己参照が可能である必要があります。これは、「parent」が署名されておらず、「id」が署名されていないためです。テーブル定義 ID 列を次のように変更します。

 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

そしてそれはうまくいきます。

参照 外部キーについて次のように述べています。「整数型のサイズと符号は同じでなければなりません」

説明されているのと同じ問題のようです ここ

他のヒント

あなたはInnoDBエンジン(SHOW ENGINE InnoDB STATUS)の状態を確認した場合、あなたは充実説明を取得します。

  

LATEST FOREIGN KEYエラー

     

[...]

     

参照先の列がテーブルと参照先テーブル内の最初の列、または列のタイプが制約のために一致していないとして表示され、参照テーブル内のインデックスを見つけることができません。

メイクid符号なします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top