Quero remover restrições da minha mesa. Minha consulta é:
ALTER TABLE `tbl_magazine_issue`
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`
Mas eu recebi um erro:
#1064
- Você tem um erro na sua sintaxe SQL; verifique o manual que corresponde à versão do servidor MySQL para a sintaxe correta a ser usada perto de 'restriçãoFK_tbl_magazine_issue_mst_users
' na linha 1
mysql
foreign-keys
constraints
alter
deepu sankar
fonte
fonte
CHECK
restrição, não há necessidade de removê-la porque nenhuma restrição real é criada. Você pode selecionarinformation_schema.table_constraints
para verificar e pode executaradd constraint
repetidas vezes sem nenhum erro. O MySQL não suportaCHECK
restrições, mas permite que o SQL pretenda criá-las (sem realmente criar as restrições).Respostas:
O Mysql possui uma sintaxe especial para eliminar restrições de chave estrangeira:
fonte
alter table .. drop constraint
. Parece que o MySQL é estranho.Eu tive o mesmo problema e consegui resolver com este código:
fonte
ALTER TABLE table_name DROP FOREIGN KEY IF EXISTS id_name_fk, DROP INDEX IF EXISTS id_name_fk;
Não existe
DROP CONSTRAINT
no MySQL. No seu caso, você pode usarDROP FOREIGN KEY
.fonte
Se a restrição não for uma chave estrangeira, por exemplo. um adicionado usando 'UNIQUE CONSTRAINT (colA, colB)', então é um índice que pode ser eliminado usando
ALTER TABLE ... DROP INDEX ...
fonte
Também é bom, você pode desativar temporariamente todas as verificações de chave estrangeira de um banco de dados mysql:
SET FOREIGN_KEY_CHECKS=0;
E para habilitá-lo novamente:SET FOREIGN_KEY_CHECKS=1;
fonte
Para adicionar um pouco à resposta de Robert Knight, já que o título da postagem em si não menciona chaves estrangeiras (e como a dele não possui exemplos de código completos e os blocos de código de comentários da SO não mostram tão bem quanto o código das respostas). blocos), adicionarei isso para restrições exclusivas . Qualquer um destes trabalhos para eliminar a restrição:
ou
fonte
Alguns ORMs ou estruturas usam uma convenção de nomenclatura diferente para chaves estrangeiras que a padrão
FK_[parent table]_[referenced table]_[referencing field]
, porque elas podem ser alteradas.O Laravel, por exemplo, usa
[parent table]_[referencing field]_foreign
como convenção de nomenclatura. Você pode mostrar os nomes das chaves estrangeiras usando esta consulta, conforme mostrado aqui :Em seguida, remova a chave estrangeira executando a consulta DROP FOREIGN KEY mencionada anteriormente e seu nome próprio.
fonte
Para aqueles que vêm aqui usando o MariaDB:
Observe que o MariaDB permite instruções DROP CONSTRAINT em geral, por exemplo, para eliminar restrições de verificação:
https://mariadb.com/kb/en/library/alter-table/
fonte
CONSTRAINT CHECK(a > b)
. Para restrições de chave estrangeira, parece que você ainda precisa daDROP FOREIGN KEY
sintaxe, pelo menos na versão 10.2 do MariaDBfonte
Não existe
DROP CONSTRAINT
no MySql. Este trabalho como mágica no mysql 5.7fonte
A maneira mais simples de remover restrições é usar a sintaxe
ALTER TABLE tbl_name DROP CONSTRAINT symbol;
introduzida no MySQL 8.0.19 :db <> demo de violino
fonte
isso funcionará no MySQL para eliminar restrições
fonte
DROP PRIMARY KEY
não deve funcionar.DROP FOREIGN KEY
funciona, mas você precisa especificar para quemdrop
. Por exemploALTER TABLE tablename DROP FOREIGN KEY id_name_fk