Saya ingin menambahkan Kunci Asing ke tabel yang disebut "Katalog".
ALTER TABLE katalog
ADD CONSTRAINT `fk_katalog_sprache`
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL;
Ketika saya mencoba melakukan ini, saya mendapatkan pesan kesalahan ini:
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150)
Kesalahan dalam Status INNODB:
120405 14:02:57 Kesalahan dalam batasan kunci asing tabel 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
Ketika saya menggunakan kueri ini berfungsi, tetapi dengan tindakan "menghapus" yang salah:
ALTER TABLE `katalog`
ADD FOREIGN KEY (`Sprache` ) REFERENCES `sprache` (`ID` )
Kedua tabel adalah InnoDB dan kedua bidang "INT (11) bukan nol". Saya menggunakan MySQL 5.1.61. Mencoba untuk memecat Permintaan ALTER ini dengan MySQL Workbench (terbaru) di MacBook Pro.
Tabel Membuat Pernyataan:
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
sudah int(11) unsigned
. sprache
tidak memiliki usigned
bagian, oleh karena itu dua kolom tidak sama.
auto_increment
kolom yang buruk. Juga, manual MySQL mengatakan: 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.
. Karena itu, ya, tipe data yang serupa dan tanda yang sama.
SHOW CREATE TABLE
, saya hanya bisa bertanya - apakah nama kolom benar-benar ID, ditulis dengan huruf besar?