「katalog」というテーブルに外部キーを追加したい。
ALTER TABLE katalog
ADD CONSTRAINT `fk_katalog_sprache`
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL;
これを実行しようとすると、次のエラーメッセージが表示されます。
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150)
INNODBステータスのエラー:
120405 14:02:57テーブルmytable。#sql-7fb1_7d3aの外部キー制約のエラー:
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL:
Cannot resolve table name close to:
(`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL
このクエリを使用すると機能しますが、「削除時」のアクションが間違っています。
ALTER TABLE `katalog`
ADD FOREIGN KEY (`Sprache` ) REFERENCES `sprache` (`ID` )
どちらのテーブルもInnoDBであり、両方のフィールドは「INT(11)not null」です。MySQL 5.1.61を使用しています。MacBook ProのMySQL Workbench(最新)でこのALTERクエリを実行しようとしています。
テーブル作成ステートメント:
CREATE TABLE `katalog` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`AnzahlSeiten` int(4) unsigned NOT NULL,
`Sprache` int(11) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `katalogname_uq` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC$$
CREATE TABLE `sprache` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Bezeichnung` varchar(45) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `Bezeichnung_UNIQUE` (`Bezeichnung`),
KEY `ix_sprache_id` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
katalog
は今すぐ見つけるのが簡単です- 持っていint(11) unsigned
ます。sprache
にはusigned
パーツがないため、2つの列は同じではありません。
auto_increment
列を参照していますが、これは問題です。また、MySQLのマニュアルには次のように記載されていCorresponding columns in the foreign key and the referenced key must have similar internal data types inside InnoDB so that they can be compared without a type conversion. The size and sign of integer types must be the same. The length of string types need not be the same. For nonbinary (character) string columns, the character set and collation must be the same.
ます。したがって、はい、同様のデータ型と同じ符号。
SHOW CREATE TABLE
、私は質問しかできません-列名は本当に大文字でIDですか?