Mysql
 sql >> Database >  >> RDS >> Mysql

Codice di errore:1005. Impossibile creare la tabella '...' (errno:150)

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:

  1. Il tipo e/o la dimensione dei due campi chiave non corrispondono esattamente. Ad esempio, se uno è INT(10) il campo chiave deve essere INT(10) anche e non INT(11) o TINYINT . Potresti voler confermare la dimensione del campo usando SHOW CREATE TABLE perché Query Browser a volte mostrerà visivamente solo INTEGER per entrambi INT(10) e INT(11) . Dovresti anche controllare che uno non sia SIGNED e l'altro è UNSIGNED . Entrambi devono essere esattamente uguali.
  2. 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.
  3. 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.
  4. Una o entrambe le tue tabelle è un MyISAM tavolo. Per poter utilizzare chiavi esterne, le tabelle devono essere entrambe InnoDB . (In realtà, se entrambe le tabelle sono MyISAM quindi non riceverai un messaggio di errore:semplicemente non creerà la chiave.) In Query Browser, puoi specificare il tipo di tabella.
  5. Hai specificato una cascata ON DELETE SET NULL , ma il campo chiave pertinente è impostato su NOT NULL . Puoi risolvere il problema modificando la sequenza o impostando il campo per consentire NULL valori.
  6. 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.
  7. Hai un valore predefinito (ovvero, default=0) nella colonna della chiave esterna
  8. 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.
  9. Hai un errore di sintassi nel tuo ALTER o hai digitato in modo errato uno dei nomi dei campi nella relazione
  10. 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