Che cosa significa mysql error 1025 (HY000): errore nella rinomina di “./foo” (errorno: 150)?

Ho provato questo in mysql:

mysql> alter table region drop column country_id; 

E ottenuto questo:

 ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to './product/region' (errno: 150) 

Qualche idea? Roba di chiave straniera?

    Di solito ricevi questo errore se le tue tabelle usano il motore InnoDB. In tal caso, è necessario rilasciare la chiave esterna, quindi eseguire la tabella delle modifiche e rilasciare la colonna.

    Ma la parte difficile è che non è ansible rilasciare la chiave esterna utilizzando il nome della colonna, ma invece si dovrebbe trovare il nome utilizzato per indicizzarlo. Per trovarlo, emetti la seguente selezione:

    MOSTRA CREA la regione della TABELLA;

    Questo dovrebbe mostrarti il ​​nome dell’indice, qualcosa di simile a questo:

    CONSTRAINT region_ibfk_1 FOREIGN KEY ( country_id ) REFERENCES country ( id ) ON DELETE NESSUN AZIONE SU AGGIORNAMENTO NESSUNA AZIONE

    Ora semplicemente emetti un:

    alter region region drop foreign region_ibfk_1 ;

    E infine un:

    alter table region drop column country_id;

    E tu sei bello andare!

    È davvero un errore di chiave esterna, puoi scoprire usando perror:

     shell$ perror 150 MySQL error code 150: Foreign key constraint is incorrectly formsd 

    Per scoprire maggiori dettagli su cosa non è riuscito, è ansible utilizzare SHOW ENGINE INNODB STATUS e cercare la sezione ULTIMO ERRORE CHIAVE STRANIERA che contiene dettagli su ciò che è sbagliato.

    Nel tuo caso, è molto probabile che qualcosa faccia riferimento alla colonna country_id.

    È anche ansible ottenere questo errore nel tentativo di eliminare una chiave esterna non esistente. Quindi, quando si rilasciano le chiavi esterne, accertarsi sempre che esistano effettivamente.

    Se la chiave esterna esiste e stai ancora ricevendo questo errore, prova quanto segue:

     SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL'; 

    // Lascia qui la chiave esterna!

     SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; 

    Questo fa sempre il trucco per me 🙂

    È sufficiente eseguire la query alter table utilizzando “KEY” anziché “FOREIGN KEY” nell’istruzione drop. Spero che questo aiuti a risolvere il problema e lascerà cadere il vincolo di chiave esterna e puoi modificare le colonne della tabella e rilasciare la tabella.

     ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub; 

    qui in DROP KEY invece di DROP FOREIGN KEY ,

    spero che possa essere d’aiuto

    Grazie

    Ho avuto problemi simili una volta. Ho cancellato la chiave primaria dalla TABELLA A, ma quando stavo cercando di cancellare la colonna chiave esterna dalla tabella BI è stato mostrato lo stesso errore di cui sopra.

    Non è ansible rilasciare la chiave esterna utilizzando il nome della colonna e ignorarla in PHPMyAdmin o con MySQL, rimuovere prima il vincolo di chiave esterna prima di ridenominare o eliminare l’attributo.

    Lo so, questo è un vecchio post, ma è il primo hit del motore di ricerca preferito da tutti se cerchi l’errore 1025.

    Tuttavia, esiste un semplice “trucco” per risolvere questo problema:

    Prima di eseguire i tuoi comandi devi prima distriggersre il controllo dei vincoli di chiave esterna usando questo comando:

     SET FOREIGN_KEY_CHECKS = 0; 

    Quindi sei in grado di eseguire i tuoi comandi.

    Dopo aver finito, non dimenticare di abilitare nuovamente i vincoli di chiave esterna, usando questo comando:

     SET FOREIGN_KEY_CHECKS = 1; 

    Buona fortuna con il tuo impegno.

    Dai un’occhiata al file di errore per il tuo database mysql. Secondo Bug # 26305, la mia sql non ti dà la causa. Questo bug esiste da quando MySQL 4.1 😉

    Se si sta utilizzando un client come MySQL Workbench, fare clic con il pulsante destro del mouse sulla tabella desiderata da cui deve essere eliminata una chiave esterna, quindi selezionare la scheda chiave esterna ed eliminare gli indici.

    Quindi puoi eseguire la query in questo modo:

     alter table table_name drop foreign_key_col_name; 

    Probabilmente c’è un’altra tabella con una chiave esterna che fa riferimento alla chiave primaria che stai cercando di cambiare.

    Per scoprire quale tabella ha causato l’errore, è ansible eseguire SHOW ENGINE INNODB STATUS e quindi esaminare la sezione LATEST FOREIGN KEY ERROR

    Utilizzare le categorie SHOW CREATE TABLE per mostrare il nome del vincolo.

    Molto probabilmente sarà categories_ibfk_1

    Usa il nome per eliminare prima la chiave esterna e poi la colonna:

     ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1; ALTER TABLE categories DROP COLUMN assets_id; 

    fare

     SET FOREIGN_KEY_CHECKS=0; 

    prima che l’operazione possa anche fare il trucco.

    Direi che il problema dei vincoli delle chiavi straniere. Country_id è utilizzato come chiave esterna in un’altra tabella?

    Non sono un guru dei database, ma penso di aver risolto un problema come questo (dove c’era un limite di fk) rimuovendo il fk, facendo il mio alter table e poi rifacendo la roba di fk.

    Sarò interessato a sapere qual è il risultato – a volte mysql è piuttosto criptico.

    Nel mio caso, stavo usando il workbench MySQL e ho affrontato lo stesso problema lasciando cadere una delle mie colonne in una tabella. Non sono riuscito a trovare il nome della chiave esterna. Ho seguito i seguenti passaggi per risolvere il problema:

    1. Rt. fai clic sul tuo schema e seleziona “schema ispettore”. Questo ti dà varie tabelle, colonne, indici, ecc.

    2. Vai alla scheda denominata “Indicatori” e cerca il nome della colonna sotto la colonna denominata “Colonna”. Una volta trovato controlla il nome della tabella per questo record sotto il nome della colonna ‘Tabella’. Se corrisponde al nome della tabella che desideri, prendi nota del nome della chiave esterna dalla colonna denominata ‘Nome’.

    3. Ora esegui la query: ALTER table tableNamexx DROP KEY foreignKeyName;

    4. Ora puoi eseguire l’istruzione drop che deve essere eseguita con successo.