it-swarm.com.de

Wie entferne ich Einschränkungen aus meiner MySQL-Tabelle?

Ich möchte Einschränkungen aus meiner Tabelle entfernen. Meine Frage ist:

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-Server-Version entspricht, auf die richtige Syntax, um nahe 'constraint FK_tbl_magazine_issue_mst_users' in Zeile 1 verwendet zu werden

211
deepu sankar

Mysql hat eine spezielle Syntax zum Löschen von Fremdschlüsseleinschränkungen:

ALTER TABLE tbl_magazine_issue
  DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users
377
Bohemian

Ich hatte das gleiche Problem und konnte es mit diesem Code lösen:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` DROP INDEX  `id_name_fk`;
43

In MySQL gibt es kein DROP CONSTRAINT. In Ihrem Fall können Sie stattdessen DROP FOREIGN KEY verwenden.

24
Lothar

Wenn die Einschränkung kein Fremdschlüssel ist, z. Eins hinzugefügt mit 'UNIQUE CONSTRAINT (colA, colB)', dann ist es ein Index, der mit ALTER TABLE ... DROP INDEX ... gelöscht werden kann.

11
Robert Knight

Um ein wenig zu Robert Knights Antwort hinzuzufügen, da der Titel des Beitrags selbst keine Fremdschlüssel erwähnt (und da dieser keine vollständigen Codebeispiele enthält und da SOs Kommentar-Codeblöcke nicht so gut wie der Code der Antworten sind Blöcke), füge ich dies für unique constraints hinzu. Mit einer der beiden Möglichkeiten kann die Einschränkung aufgehoben werden:

ALTER TABLE `table_name` DROP KEY `uc_name`;

oder

ALTER TABLE `table_name` DROP INDEX `uc_name`;
4
jbobbins

Außerdem können Sie vorübergehend alle Fremdschlüsselüberprüfungen aus einer MySQL-Datenbank deaktivieren: SET FOREIGN_KEY_CHECKS=0; Um sie erneut zu aktivieren: SET FOREIGN_KEY_CHECKS=1;

3
roelleor

Einige ORMs oder Frameworks verwenden eine andere Namenskonvention für Fremdschlüssel als der Standardcode FK_[parent table]_[referenced table]_[referencing field], da sie geändert werden können. 

Laravel verwendet beispielsweise [parent table]_[referencing field]_foreign als Namenskonvention. Sie können die Namen der Fremdschlüssel anzeigen, indem Sie diese Abfrage verwenden, wie hier :

SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE REFERENCED_TABLE_SCHEMA = '<database>' AND REFERENCED_TABLE_NAME = '<table>';

Entfernen Sie dann den Fremdschlüssel, indem Sie die zuvor erwähnte DROP FOREIGN KEY-Abfrage und den richtigen Namen ausführen. 

2
piscator

Für diejenigen, die mit MariaDB hierher kommen:

Beachten Sie, dass MariaDB generell DROP CONSTRAINT-Anweisungen zulässt, z.

ALTER TABLE table_name
DROP CONSTRAINT constraint_name;

https://mariadb.com/kb/de/library/alter-table/

1
Markus Barthlen
  1. Gehen Sie zur Strukturansicht der Tabelle 
  2. Sie sehen oben 2 Optionen. A.Tabelle Struktur b. Beziehungsansicht
  3. Klicken Sie nun auf Relation view , hier können Sie Ihre Fremdschlüsseleinschränkung löschen. Sie erhalten hier alle Beziehungen.
1
Akshay Sharma