9
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

なぜ間違っているのですか?

4

2 に答える 2

11

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

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

そしてそれはうまくいくでしょう。

外部キーについてのリファレンスには、「整数型のサイズと符号は同じでなければならない」と記載されています。

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

于 2010-02-23T12:22:47.780 に答える
1

InnoDB エンジン ( SHOW ENGINE InnoDB STATUS) のステータスを確認すると、より詳細な説明が表示されます。

最新の外部キー エラー

[...]

参照される列が最初の列として表示される参照されるテーブルにインデックスが見つからないか、テーブルと参照されるテーブルの列の型が制約に対して一致しません。

無印にしidます。

于 2010-02-23T12:29:42.580 に答える