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 usandoSHOWCREATETABLEperché Query Browser a volte mostrerà visivamente soloINTEGERper entrambiINT(10)eINT(11). Dovresti anche controllare che uno non siaSIGNEDe 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
MyISAMtavolo. Per poter utilizzare chiavi esterne, le tabelle devono essere entrambeInnoDB. (In realtà, se entrambe le tabelle sonoMyISAMquindi non riceverai un messaggio di errore:semplicemente non creerà la chiave.) In Query Browser, puoi specificare il tipo di tabella. - Hai specificato una cascata
ONDELETESETNULL, ma il campo chiave pertinente è impostato suNOTNULL. Puoi risolvere il problema modificando la sequenza o impostando il campo per consentireNULLvalori. - 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
ALTERo 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