Codice di errore:1005 -- c'è un riferimento alla chiave primaria errato nel tuo codice
Di solito è dovuto a un campo di chiave esterna referenziato che non esiste. Potrebbe essere che hai un errore di battitura, o controlla che il caso dovrebbe essere lo stesso, o c'è una mancata corrispondenza del tipo di campo. I campi collegati a chiavi esterne devono corrispondere esattamente alle definizioni.
Alcune cause note potrebbero essere:
- Il tipo e/o la dimensione dei due campi chiave non corrispondono esattamente. Ad esempio, se uno è
INT(10)
il campo chiave deve essereINT(10)
anche e nonINT(11)
oTINYINT
. Potresti voler confermare la dimensione del campo usandoSHOW
CREATE
TABLE
perché Query Browser a volte mostrerà visivamente soloINTEGER
per entrambiINT(10)
eINT(11)
. Dovresti anche controllare che uno non siaSIGNED
e l'altro èUNSIGNED
. Entrambi devono essere esattamente uguali. - Uno dei campi chiave a cui stai tentando di fare riferimento non ha un indice e/o non è una chiave primaria. Se uno dei campi nella relazione non è una chiave primaria, devi creare un indice per quel campo.
- Il nome della chiave esterna è un duplicato di una chiave già esistente. Verifica che il nome della tua chiave esterna sia univoco all'interno del tuo database. Basta aggiungere alcuni caratteri casuali alla fine del nome della chiave per verificarlo.
- Una o entrambe le tue tabelle è un
MyISAM
tavolo. Per poter utilizzare chiavi esterne, le tabelle devono essere entrambeInnoDB
. (In realtà, se entrambe le tabelle sonoMyISAM
quindi non riceverai un messaggio di errore:semplicemente non creerà la chiave.) In Query Browser, puoi specificare il tipo di tabella. - Hai specificato una cascata
ON
DELETE
SET
NULL
, ma il campo chiave pertinente è impostato suNOT
NULL
. Puoi risolvere il problema modificando la sequenza o impostando il campo per consentireNULL
valori. - Assicurati che le opzioni Charset e Fascicola siano le stesse sia a livello di tabella che a livello di singolo campo per le colonne chiave.
- Hai un valore predefinito (ovvero, default=0) nella colonna della chiave esterna
- Uno dei campi nella relazione fa parte di una chiave di combinazione (composita) e non dispone di un proprio indice individuale. Anche se il campo ha un indice come parte della chiave composta, devi creare un indice separato solo per quel campo chiave per poterlo utilizzare in un vincolo.
- Hai un errore di sintassi nel tuo
ALTER
o hai digitato in modo errato uno dei nomi dei campi nella relazione - Il nome della tua chiave esterna supera la lunghezza massima di 64 caratteri.
Per maggiori dettagli, fare riferimento a:Errore MySQL numero 1005 Impossibile creare la tabella