Voglio aggiungere una chiave esterna a una tabella chiamata "katalog".
ALTER TABLE katalog
ADD CONSTRAINT `fk_katalog_sprache`
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL;
Quando provo a fare questo, ricevo questo messaggio di errore:
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150)
Errore nello stato INNODB:
120405 14:02:57 Errore nel vincolo di chiave esterna della tabella 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
Quando utilizzo questa query funziona, ma con un'azione "all'eliminazione" errata:
ALTER TABLE `katalog`
ADD FOREIGN KEY (`Sprache` ) REFERENCES `sprache` (`ID` )
Entrambe le tabelle sono InnoDB ed entrambi i campi sono "INT (11) non null". Sto usando MySQL 5.1.61. Tentativo di eseguire questa query ALTER con MySQL Workbench (il più recente) su un MacBook Pro.
Tabella Crea istruzioni:
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
ha int(11) unsigned
. sprache
non ha la usigned
parte, quindi due colonne non sono uguali.
auto_increment
colonne che non vanno bene. Inoltre, il manuale di MySQL dice: 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.
. Pertanto, sì, tipo di dati simile e lo stesso segno.
SHOW CREATE TABLE
, posso solo ma chiedere: il nome della colonna è davvero ID, maiuscolo?