O que o erro mysql 1025 (HY000): Erro na renomeação de ‘./foo’ (errorno: 150) significa?

Eu tentei isso no mysql:

mysql> alter table region drop column country_id; 

E entendi isso:

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

Alguma ideia? Coisas chave estrangeira?

    Você geralmente recebe este erro se suas tabelas usam o mecanismo InnoDB. Nesse caso, você teria que soltar a chave estrangeira e, em seguida, fazer a tabela de alteração e soltar a coluna.

    Mas a parte complicada é que você não pode descartar a chave estrangeira usando o nome da coluna, mas em vez disso você teria que encontrar o nome usado para indexá-la. Para descobrir isso, emita a seguinte seleção:

    SHOW CREATE TABLE region;

    Isso deve mostrar o nome do índice, algo assim:

    CONSTRAINT region_ibfk_1 CHAVE ESTRANGEIRA ( country_id ) REFERÊNCIAS country ( id ) ON DELETE NO ACTION NO UPDATE NO ACTION

    Agora simplesmente emita um:

    alter table region drop chave estrangeira region_ibfk_1 ;

    E finalmente um:

    alterar a região da tabela drop column country_id;

    E você é bom para ir!

    Na verdade, é um erro de chave estrangeira, você pode descobrir usando o perigo:

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

    Para descobrir mais detalhes sobre o que falhou, você pode usar SHOW ENGINE INNODB STATUS e procurar a seção SHOW ENGINE INNODB STATUS FOREIGN KEY ERROR, que contém detalhes sobre o que está errado.

    No seu caso, é mais provável que algo esteja referenciando a coluna country_id.

    Você também pode obter esse erro ao tentar eliminar uma chave estrangeira inexistente. Portanto, ao descartar foreign keys, sempre verifique se elas realmente existem.

    Se a chave estrangeira existir e você ainda estiver recebendo este erro, tente o seguinte:

     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'; 

    // Solte a chave estrangeira aqui!

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

    Isso sempre faz o truque para mim 🙂

    Basta executar a consulta alter table usando ‘KEY’ em vez de ‘FOREIGN KEY’ na instrução drop. Espero que ajude a resolver o problema e elimine a restrição de chave estrangeira e você pode alterar as colunas da tabela e soltar a tabela.

     ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub; 

    aqui em DROP KEY vez de DROP FOREIGN KEY ,

    espero que ajude.

    obrigado

    Eu tive problemas semelhantes uma vez. Eu apaguei a chave primária da tabela A, mas quando eu estava tentando excluir a coluna de chave estrangeira da tabela BI foi mostrado o mesmo erro acima.

    Você não pode descartar a chave estrangeira usando o nome da coluna e ignorar isso no PHPMyAdmin ou com o MySQL, primeiro remova a restrição de chave estrangeira antes de renomear ou excluir o atributo.

    Eu sei, este é um post antigo, mas é o primeiro hit no motor de busca favorito de todos, se você estiver procurando por erro 1025.

    No entanto, há um “hack” fácil para corrigir esse problema:

    Antes de executar seu (s) comando (s) você primeiro tem que desabilitar a verificação de restrições de chave estrangeira usando este comando:

     SET FOREIGN_KEY_CHECKS = 0; 

    Então você pode executar seu (s) comando (s).

    Depois de terminar, não se esqueça de ativar novamente a verificação de restrições de chave estrangeira, usando este comando:

     SET FOREIGN_KEY_CHECKS = 1; 

    Boa sorte com o seu esforço.

    Dê uma olhada no arquivo de erro para o seu database mysql. De acordo com o bug # 26305, meu sql não fornece a causa. Este bug existe desde o MySQL 4.1 😉

    Se você estiver usando um cliente como o MySQL Workbench, clique com o botão direito na tabela desejada de onde uma chave estrangeira deve ser excluída, selecione a guia de chave estrangeira e exclua os índices.

    Então você pode executar a consulta assim:

     alter table table_name drop foreign_key_col_name; 

    Provavelmente há outra tabela com uma chave estrangeira referenciando a chave primária que você está tentando alterar.

    Para descobrir qual tabela causou o erro, você pode executar SHOW ENGINE INNODB STATUS e, em seguida, examinar a seção SHOW ENGINE INNODB LATEST FOREIGN KEY ERROR

    Use as categorias SHOW CREATE TABLE para mostrar o nome da restrição.

    Muito provavelmente será o categories_ibfk_1

    Use o nome para soltar a chave estrangeira primeiro e a coluna então:

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

    Fazendo

     SET FOREIGN_KEY_CHECKS=0; 

    antes da Operação também pode fazer o truque.

    Eu acho que problema de restrição de chave estrangeira. O country_id é usado como uma chave estrangeira em outra tabela?

    Eu não sou guru do DB, mas eu acho que resolvi um problema como este (onde havia uma restrição fk) removendo o fk, fazendo meu material de alter table e, em seguida, refazendo as coisas fk.

    Eu estarei interessado em saber qual é o resultado – em algum momento, o mysql é bastante enigmático.

    No meu caso, eu estava usando o MySQL workbench e enfrentei o mesmo problema ao descartar uma das minhas colunas em uma tabela. Não consegui encontrar o nome da chave estrangeira. Eu segui os seguintes passos para resolver o problema:

    1. Rt. clique no seu esquema e selecione “inspetor de esquema”. Isto dá-lhe várias tabelas, colunas, índices, etc.

    2. Vá para a aba chamada ‘Indexes’ e procure o nome da coluna sob a coluna chamada ‘Column’. Uma vez encontrado, verifique o nome da tabela para este registro sob o nome da coluna ‘Tabela’. Se corresponder ao nome da tabela desejada, anote o nome da chave estrangeira na coluna denominada ‘Nome’.

    3. Agora execute a consulta: tabela ALTER tableNamexx DROP KEY foreignKeyName;

    4. Agora você pode executar a instrução drop que deve ser executada com sucesso.