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.