Ich möchte Einschränkungen aus meiner Tabelle entfernen. Meine Anfrage lautet:
ALTER TABLE `tbl_magazine_issue`
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`
Aber ich habe einen Fehler bekommen:
#1064
- Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von 'EinschränkungFK_tbl_magazine_issue_mst_users
' in Zeile 1
mysql
foreign-keys
constraints
alter
Deepu Sankar
quelle
quelle
CHECK
Einschränkung erstellt haben, müssen Sie sie nicht löschen, da keine tatsächliche Einschränkung erstellt wird. Sie können aus auswähleninformation_schema.table_constraints
, um zu überprüfen, und Sie können das sogaradd constraint
immer und immer wieder ohne Fehler ausführen . MySQL unterstützt keineCHECK
Einschränkungen, lässt jedoch zu, dass SQL diese erstellen soll (ohne die Einschränkungen tatsächlich zu erstellen).Antworten:
MySQL hat eine spezielle Syntax zum Löschen von Fremdschlüsseleinschränkungen:
quelle
alter table .. drop constraint
. MySQL ist anscheinend das Ungewöhnliche.Ich hatte das gleiche Problem und musste es mit diesem Code lösen:
quelle
ALTER TABLE table_name DROP FOREIGN KEY IF EXISTS id_name_fk, DROP INDEX IF EXISTS id_name_fk;
Es gibt kein
DROP CONSTRAINT
MySQL. In Ihrem Fall könnten SieDROP FOREIGN KEY
stattdessen verwenden.quelle
Wenn die Einschränkung kein Fremdschlüssel ist, z. Einer, der mit 'UNIQUE CONSTRAINT (colA, colB)' hinzugefügt wurde, ist ein Index, der mit gelöscht werden kann
ALTER TABLE ... DROP INDEX ...
quelle
Auch schön, Sie können vorübergehend alle Fremdschlüsselprüfungen aus einer MySQL-Datenbank deaktivieren:
SET FOREIGN_KEY_CHECKS=0;
Und um es wieder zu aktivieren:SET FOREIGN_KEY_CHECKS=1;
quelle
Um ein wenig zu Robert Knights Antwort hinzuzufügen, da der Titel des Beitrags selbst keine Fremdschlüssel erwähnt (und da er keine vollständigen Codebeispiele hat und die Kommentarcodeblöcke von SO nicht so gut angezeigt werden wie der Code der Antworten Blöcke), ich werde dies für eindeutige Einschränkungen hinzufügen . Beides funktioniert, um die Einschränkung aufzuheben:
oder
quelle
Einige ORMs oder Frameworks verwenden eine andere Namenskonvention für Fremdschlüssel als die Standardkonvention
FK_[parent table]_[referenced table]_[referencing field]
, da sie geändert werden können.Laravel verwendet zum Beispiel
[parent table]_[referencing field]_foreign
als Namenskonvention. Mit dieser Abfrage können Sie die Namen der Fremdschlüssel anzeigen, wie hier gezeigt :Entfernen Sie dann den Fremdschlüssel, indem Sie die zuvor erwähnte Abfrage DROP FOREIGN KEY und ihren Eigennamen ausführen.
quelle
Für diejenigen, die mit MariaDB hierher kommen:
Beachten Sie, dass MariaDB DROP CONSTRAINT-Anweisungen im Allgemeinen zulässt, z. B. zum Löschen von Prüfbeschränkungen:
https://mariadb.com/kb/en/library/alter-table/
quelle
CONSTRAINT CHECK(a > b)
. Für Fremdschlüsseleinschränkungen benötigen Sie anscheinend immer noch dieDROP FOREIGN KEY
Syntax, zumindest in MariaDB Version 10.2quelle
Es gibt kein
DROP CONSTRAINT
In MySql. Dies funktioniert wie Magie in MySQL 5.7quelle
Der einfachste Weg, um Einschränkungen zu entfernen, ist die Verwendung
ALTER TABLE tbl_name DROP CONSTRAINT symbol;
der in MySQL 8.0.19 eingeführten Syntax :db <> Geigen-Demo
quelle
Dies funktioniert unter MySQL, um Einschränkungen aufzuheben
quelle
DROP PRIMARY KEY
sollte nicht funktionieren.DROP FOREIGN KEY
funktioniert, aber Sie müssen angeben, wem zudrop
. Zum BeispielALTER TABLE tablename DROP FOREIGN KEY id_name_fk