Eu tentei isso no mysql:
mysql> alter table region drop column country_id;
E entendi:
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
Alguma ideia? Coisas chave estrangeira?
mysql
mysql-error-1025
Trenton
fonte
fonte
Respostas:
Você geralmente recebe esse erro se suas tabelas usam o mecanismo InnoDB. Nesse caso, você teria que soltar a chave estrangeira e, em seguida, alterar a tabela e soltar a coluna.
Mas a parte complicada é que você não pode soltar a chave estrangeira usando o nome da coluna, mas, em vez disso, teria que encontrar o nome usado para indexá-la. Para encontrar isso, emita o seguinte, selecione:
Isso deve mostrar o nome do índice, algo como isto:
Agora basta emitir um:
E finalmente um:
E você está pronto para ir!
fonte
É realmente um erro de chave estrangeira, você pode descobrir usando o perror:
Para descobrir mais detalhes sobre o que falhou, você pode usar
SHOW ENGINE INNODB STATUS
e procurar a seção ÚLTIMO ERRO DE CHAVE ESTRANGEIRA, que contém detalhes sobre o que está errado.No seu caso, é provável que algo esteja fazendo referência à coluna country_id.
fonte
Você também pode obter esse erro ao tentar soltar uma chave estrangeira inexistente. Portanto, ao descartar chaves estrangeiras, sempre verifique se elas realmente existem.
Se a chave estrangeira existir e você ainda estiver recebendo esse erro, tente o seguinte:
// Largue a chave estrangeira aqui!
Isso sempre faz o truque para mim :)
fonte
Basta executar a consulta de alteração da tabela 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ê possa alterar as colunas da tabela e soltar a tabela.
aqui em
DROP KEY
vez deDROP FOREIGN KEY
,espero que ajude.
obrigado
fonte
Eu sei, este é um post antigo, mas é o primeiro hit no mecanismo de pesquisa favorito de todos, se você estiver procurando pelo erro 1025.
No entanto, existe um "hack" fácil para corrigir esse problema:
Antes de executar o (s) comando (s), primeiro desabilite a verificação de restrições de chave estrangeira usando este comando:
Então você pode executar seus comandos.
Depois de concluir, não se esqueça de ativar a verificação de restrições de chave estrangeira novamente, usando este comando:
Boa sorte com seu empenho.
fonte
Eu tive problemas semelhantes uma vez. Excluí a chave primária da TABELA A, mas quando 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 para ignorá-la no PHPMyAdmin ou no MySQL, remova primeiro a restrição de chave estrangeira antes de renomear ou excluir o atributo.
fonte
Dê uma olhada no arquivo de erro do seu banco de dados mysql. De acordo com o Bug # 26305, meu sql não fornece a causa. Este bug existe desde o MySQL 4.1 ;-)
fonte
Se você estiver usando um cliente como o MySQL Workbench, clique com o botão direito do mouse na tabela desejada de onde uma chave estrangeira deve ser excluída, selecione a guia Chave estrangeira e exclua os índices.
Então você pode executar a consulta assim:
fonte
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, consulte aLATEST FOREIGN KEY ERROR
seçãoUse as categorias SHOW CREATE TABLE para mostrar o nome da restrição.
Provavelmente serão categories_ibfk_1
Use o nome para soltar a chave estrangeira primeiro e a coluna:
fonte
Fazendo
antes que a operação também possa fazer o truque.
fonte
Eu acho que o problema de restrição de chave estrangeira. Country_id é usado como uma chave estrangeira em outra tabela?
Eu não sou um guru do DB, mas acho que resolvi um problema como esse (onde havia uma restrição de fk) removendo o fk, fazendo minhas alterações na tabela e refazendo-o.
Ficarei interessado em saber qual é o resultado - em algum momento o mysql é bastante enigmático.
fonte
No meu caso, eu estava usando o MySQL Workbench e enfrentei o mesmo problema ao soltar uma das minhas colunas em uma tabela. Não consegui encontrar o nome da chave estrangeira. Segui as seguintes etapas para resolver o problema:
Rt. clique no seu esquema e selecione 'inspetor de esquema'. Isso fornece várias tabelas, colunas, índices, etc.
Vá para a guia 'Índices' e procure o nome da coluna sob a coluna 'Coluna'. 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'.
Agora execute a consulta: ALTER table tableNamexx DROP KEY ForeignKeyName;
Agora você pode executar a instrução drop que deve ser executada com sucesso.
fonte
Eu recebi esse erro com o MySQL 5.6, mas não tinha nada a ver com chaves estrangeiras. Isso ocorreu em uma máquina com Windows 7 Professional, atuando como servidor em uma pequena LAN.
O aplicativo cliente estava executando uma operação em lote que cria uma tabela, preenchendo-a com alguns dados externos e, em seguida, executa uma consulta unindo-se a tabelas permanentes e eliminando a tabela "temporária". Esse lote faz isso aproximadamente 300 vezes e essa rotina específica está em execução semana após semana por vários anos, quando de repente obtemos o Erro 1025 Não é possível renomear o problema em um ponto aleatório do lote.
No meu caso, o aplicativo estava usando 4 instruções DDL, uma CREATE TABLE seguida de 3 CREATE INDEX, não há chave estrangeira. No entanto, apenas 2 dos índices são criados e o arquivo .frm da tabela real foi renomeado, no ponto de falha.
Minha solução foi livrar-se das instruções CREATE INDEX separadas e criá-las usando a instrução CREATE TABLE. Isso, no momento da redação deste artigo, resolveu o problema para mim e para minha ajuda alguém coçando a cabeça ao encontrar esse tópico.
fonte
averageRatings = FOREACH groupedRatings GERAR grupo COMO movieID, AVG (ratings.rating) COMO avgRating, COUNT (ratings.rating) AS numRatings;
Se você estiver usando algum comando como o descrito acima, deverá usar o grupo em letras minúsculas. Isso pode resolver o seu problema, resolveu o meu. Pelo menos no script PIG.
fonte