"Katalog" adlı bir tabloya Yabancı Anahtar eklemek istiyorum.
ALTER TABLE katalog
ADD CONSTRAINT `fk_katalog_sprache`
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL;
Bunu yapmaya çalıştığımda, bu hata iletisini alıyorum:
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150)
INNODB Durumunda Hata:
120405 14:02:57 Tablo mytable'ın yabancı anahtar kısıtlamasında hata. # 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
Bu sorguyu kullandığımda çalışır, ancak yanlış "silme" eylemi ile:
ALTER TABLE `katalog`
ADD FOREIGN KEY (`Sprache` ) REFERENCES `sprache` (`ID` )
Her iki tablo da InnoDB ve her iki alan da "INT (11) null değil" dir. MySQL 5.1.61 kullanıyorum. Bu ALTER Sorgusunu bir MacBook Pro'da MySQL Workbench (en yeni) ile tetiklemeye çalışın.
Tablo İfadeleri Oluşturma:
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
var int(11) unsigned
. sprache
yok usigned
bu nedenle iki sütun aynı değildir, parçası.
auto_increment
kötü olan iki sütuna başvuruyorsunuz . Ayrıca, MySQL manuel diyor: 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.
. Bu nedenle, evet, benzer veri türü ve aynı işaret.
SHOW CREATE TABLE
, sadece sorabilirim - sorabilirim - sütun adı gerçekten büyük harf mi?