Eu tenho uma tabela cuja chave primária é usada em várias outras tabelas e possui várias chaves estrangeiras para outras tabelas.
CREATE TABLE location (
locationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
...
) ENGINE = InnoDB;
CREATE TABLE assignment (
assignmentID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
locationID INT NOT NULL,
FOREIGN KEY locationIDX (locationID) REFERENCES location (locationID)
...
) ENGINE = InnoDB;
CREATE TABLE assignmentStuff (
...
assignmentID INT NOT NULL,
FOREIGN KEY assignmentIDX (assignmentID) REFERENCES assignment (assignmentID)
) ENGINE = InnoDB;
O problema é que, quando estou tentando soltar uma das colunas de chave estrangeira (ou seja, locationIDX), isso gera um erro.
"ERRO 1025 (HY000): erro ao renomear"
Como posso soltar a coluna na tabela de atribuições acima sem obter esse erro?
mysql
foreign-keys
constraints
mysql-error-1025
Desenhou
fonte
fonte
SHOW CREATE TABLE footable;
para ver qual é o nome da restrição. Não é o nome da coluna em si. Obrigado pela resposta!As chaves estrangeiras existem para garantir a integridade dos dados; portanto, você não pode soltar uma coluna desde que faça parte de uma chave estrangeira. Você precisa soltar a chave primeiro.
Eu acho que a seguinte consulta faria isso:
fonte
Como todos disseram acima, você pode excluir facilmente um FK. No entanto, acabei de notar que pode ser necessário descartar a própria chave em algum momento. Se você tiver alguma mensagem de erro para criar outro índice como o último, com o mesmo nome, seria útil descartar tudo relacionado a esse índice.
fonte
Verifique qual é o nome da CONSTRAINT e o nome da CHAVE ESTRANGEIRA:
Remova o nome CONSTRAINT e o nome FOREIGN KEY:
Espero que isto ajude!
fonte
Aqui está uma maneira de eliminar a restrição de chave estrangeira, ela funcionará. ALTER TABLE
location
.location_id
CHAVE ESTRANGEIRAlocation_ibfk_1
;fonte
Ei, segui uma sequência acima e encontrei alguma solução.
Você receberá o FK Constrain Name como
Agora você precisa remover essas restrições. por alter table commantd
Em seguida, solte a coluna da tabela,
fonte
Você geralmente recebe esse erro se suas tabelas usarem 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 uma linha: no canto superior esquerdo, clique na opção +, clique no botão raio do texto completo e, em seguida, clique em ir. Onde você obterá o nome do índice, algo como isto:
CONSTRAINT region_ibfk_1 CHAVE ESTRANGEIRA (country_id) REFERÊNCIAS country (id) EM EXCLUIR NO ACTION ON ATUALIZAR NO ACTION Agora basta emitir um:
alterar tabela região soltar chave estrangeira region_ibfk_1;
ou
mais simplesmente digite: - alter table TableName solte a chave estrangeira TableName_ibfk_1 ;
lembre-se de que a única coisa é adicionar _ibfk_1 após o nome da tabela para fazer assim: - TableName _ibfk_1
fonte
Você não pode descartar a coluna de chave estrangeira porque está sendo referenciada na tabela
assignmentStuff
. Portanto, você deve primeiro eliminar a restrição de chave estrangeiraassignmentStuff.assignmentIDX
.Uma pergunta semelhante já foi feita aqui . Verifique também aqui para mais informações.
fonte
Tente o seguinte:
fonte
passo 1:
show create table vendor_locations;
passo 2:
ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;
funcionou para mim.
fonte
primeiro é necessário obter o nome real da restrição por esta consulta
Essa consulta resultará em restringir o nome da chave estrangeira, agora a consulta abaixo será eliminada.
O último número no nome de restrição acima depende de quantas chaves estrangeiras você possui na tabela
fonte