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?
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?
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:
Mostrar região CREATE TABLE;
Isso deve mostrar o nome do índice, algo como isto:
RESTRIÇÃO
region_ibfk_1
EXTERNA CHAVE (country_id
) Referênciascountry
(id
) em excluir qualquer acção por ACTUALIZAÇÃO NO ACTION
Agora basta emitir um:
alterar região da tabela soltar chave estrangeira
region_ibfk_1
;
E finalmente um:
alterar coluna da tabela região soltar country_id;
E você está pronto para ir!
É realmente um erro de chave estrangeira, você pode descobrir usando o perror:
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 Ú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.
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:
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';
// Largue 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 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.
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 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:
SET FOREIGN_KEY_CHECKS = 0;
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:
SET FOREIGN_KEY_CHECKS = 1;
Boa sorte com seu empenho.
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.
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 ;-)
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:
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, consulte a LATEST FOREIGN KEY ERROR
seção
Use 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:
ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;
Fazendo
SET FOREIGN_KEY_CHECKS=0;
antes que a operação também possa fazer o truque.
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.
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.
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.
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.