24

vorrei cadere la chiave esterna nel mio tavolo, ma stato in questo messaggio di errorein grado di eliminare la chiave

mysql> alter table customers drop foreign key customerid; 
ERROR 1025 (HY000): Error on rename of '.\products\customers' to '.\products\#sql2-7ec-a3' (errno: 152) 
mysql> 
+1

Questo può aiutare a capire http://stackoverflow.com/questions/160233/what-does-mysql-error-1025-hy000-error-on-rename-of-foo-errorno-150-me – Imdad

+1

@ Imdad Questo collegamento descrive un altro errore - (errno: 150) – Devart

+0

Prova questo. Crea una nuova tabella (senza vincoli di chiave esterna). copia i dati nella nuova tabella (usando la sintassi INSERT INTO new_table SELECT * FROM old_table) Rilascia la vecchia tabella – Imdad

risposta

6

Per evitare questo errore durante il tentativo di eliminare una chiave esterna, utilizzare il nome del vincolo anziché il nome della colonna della chiave esterna.

quando ho provato

mysql> ALTER TABLE mytable DROP PRIMARY KEY; 

ho ottenuto l'errore come

ERROR 1025 (HY000): Error on rename of '.\database\#sql-454_3' to '.\database\mytable' (errno: 150). 

ho risolto utilizzando:

mysql> ALTER TABLE mytable DROP PRIMARY KEY, ADD PRIMARY KEY (column1,column2,column3); 

Alcuni link che vi aiuterà.

link 1

link 2 [Se vuoi inserire Pubblicato da Alex Blume il 7 novembre 2008 17:09 & Pubblicato da Hector Delgadillo il 21 gennaio 2011 04:57]

+0

non funziona per me. – user60627

+0

ha funzionato per me !. Grazie. – aizquier

1

Per evitare questo errore durante il tentativo di eliminare una chiave esterna, utilizzare il nome del vincolo estero piuttosto che il nome della colonna della chiave esterna

7

Sembra un bug nella messaggistica di errore di MySQL. (http://bugs.mysql.com/bug.php?id=10333)

Usa SHOW CREATE TABLE table_name per vedere il nome effettivo della chiave esterna. Sembra che potrebbe essere un problema del browser di query mysql durante la generazione della query con l'ortografia errata del nome della chiave esterna.

+2

Mi aiuta a sapere che il mio vincolo è stato creato come INDICE, non FOREIGN KEY. Quindi ho usato la clausola "DROP INDEX". Grazie. –

32

La soluzione descritta here by Chris White ha lavorato per me.

Il problema principale è che MySQL crea sia un indice che una chiave esterna. Entrambi devono essere rimossi (la chiave esterna in primo luogo contraria a ciò che ha detto Chris).

  1. mostra creare tabella nome_tabella;

    SHOW CREATE TABLE `table_name`: 
    
    | table_name | CREATE TABLE `table_name` (
        `id` int(20) unsigned NOT NULL auto_increment, 
        `key_column` smallint(5) unsigned default '1', 
        KEY `column_tablein_26440ee6` (`key_column`), <--- shows key name 
        CONSTRAINT `table_name_ibfk_1` FOREIGN KEY (`key_column`) REFERENCES <--- shows foreign key constraint name 
    `second_table` (`id`) ON DELETE SET NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 
    
  2. Eliminare il vincolo di chiave esterna:

    ALTER TABLE table_name DROP FOREIGN KEY `table_name_ibfk_1`; 
    
  3. eliminare la chiave

    ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`; 
    

che ha fatto per me.

+1

+1 Vuoi aggiungere che ci sono molte domande (forse duplicate) di questo, e la risposta di @bbrame è quella che ha funzionato per me. –

+0

non ho la sezione dei vincoli in show create table 'name' ma quando faccio desc 'name' posso vedere il campo per avere il vincolo di chiave esterna – proprius

+0

Questo è un esempio perfetto che mostra come gestire la caduta di chiave esterna. Molte grazie a @bbframe. Ha funzionato per me. – prashant

0

Si dovrebbe provare con il nome della chiave esterna come suggerito Fahim Parkar. In realtà questo non funziona sempre.

Nel mio caso ho usato il codice

FOREIGN KEY `fk`(`col1`) REFERENCES `table2`(`col1`) 

per aggiungere la fk dalla creazione.

Il problema con questo codice non è valido e dovrebbe generare una sorta di errore di sintassi, ma ha comunque aggiunto una chiave esterna con un nome casuale.

Quando ho aggiunto il fk con la sintassi giusta:

CONSTRAINT `fk` FOREIGN KEY (`col1`) REFERENCES `table2`(`col1`) 

il seguente codice è sceso in modo corretto:

ALTER TABLE `table1` DROP FOREIGN KEY `fk` 

Quindi questo tipo di errore può accadere anche se si tenta di rimuovere una straniera chiave con un nome non valido. È importante visualizzare le proprietà della tabella con

SHOW CREATE TABLE `table1` 

e verificare i nomi di chiavi esterne se si ottiene questo tipo di errori.

Problemi correlati