Einfache Implementierung zum Ignorieren von Fremdschlüsseleinschränkungen beim Löschen von MySQL-Tabellen

Einfache Implementierung zum Ignorieren von Fremdschlüsseleinschränkungen beim Löschen von MySQL-Tabellen

Das Löschen einer Tabelle kommt nicht sehr häufig vor. Insbesondere bei Tabellen mit Fremdschlüsselassoziationen müssen Sie beim Löschen vorsichtiger sein. Während des Entwicklungsprozesses kommt es jedoch häufig vor, dass Probleme mit dem Schemaentwurf festgestellt werden und alle Tabellen in der vorhandenen Datenbank gelöscht und neu erstellt werden müssen. Darüber hinaus ist es während des Tests auch erforderlich, alle Tabellen in der Datenbank neu zu erstellen. Natürlich können das auch viele automatisierte Tools.

Beim Löschen einer Tabelle wird möglicherweise eine Fehlermeldung wie diese angezeigt:

FEHLER 1217 (23000): Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl

Dies liegt daran, dass die Felder in der Tabelle, die Sie löschen möchten, als Fremdschlüssel in anderen Tabellen verwendet werden. Daher müssen Sie die Tabelle mit dem Fremdschlüssel (untergeordnete Tabelle) löschen, bevor Sie diese Tabelle (übergeordnete Tabelle) löschen. Das heißt, der Vorgang zum Löschen einer Tabelle muss mit dem Vorgang zum Erstellen einer Tabelle konsistent sein.

Dies ist jedoch häufig nicht akzeptabel. Einerseits ist eine manuelle Sortierung bei zu vielen Tabellen nicht akzeptabel. Andererseits gibt es derzeit kein automatisches Tool zum Sortieren (tatsächlich ist dies nicht unmöglich). Aus diesem Grund stellt MySQL die Variable FOREIGN_KEY_CHECKS bereit, um festzulegen, ob bei Bedarf Fremdschlüsseleinschränkungen überprüft werden sollen.

Generell wird folgendes empfohlen:

Generieren Sie zunächst automatisch alle DROP-Anweisungen und ersetzen Sie MyDatabaseName durch Ihren Datenbanknamen:

SELECT concat('Tabelle löschen, wenn vorhanden', Tabellenname, ';')
VON information_schema.tables
WHERE table_schema = 'MeinDatenbankname';

Fügen Sie dann die folgenden Anweisungen hinzu, um die Variable FOREIGN_KEY_CHECKS vor und nach dem generierten Code festzulegen:

SETZEN SIE FOREIGN_KEY_CHECKS = 0
-- DROP-Anweisung SET FOREIGN_KEY_CHECKS = 1;

Wenn Sie jedoch den letzten Satz vergessen, spielt das keine große Rolle. Diese Variable basiert auf der Sitzung. Das heißt, wenn Sie den Client schließen und erneut verbinden, wird diese Variable auf den Standardwert zurückgesetzt. Wenn Sie Fremdschlüsseleinschränkungen nicht global prüfen müssen (diese Situation ist relativ selten), können Sie Folgendes tun:

Setzen Sie GLOBAL FOREIGN_KEY_CHECKS = 0;

oder

setze @@global.FOREIGN_KEY_CHECKS = 0;

Die obige einfache Implementierung zum Ignorieren von Fremdschlüsseleinschränkungen beim Löschen von MySQL-Tabellen ist der gesamte Inhalt, den der Editor mit Ihnen teilt. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden.

Das könnte Sie auch interessieren:
  • Spezielle Methode zum Hinzufügen von Fremdschlüsseleinschränkungen in MySQL
  • MySQL-Fremdschlüsseleinschränkung (FOREIGN KEY) Fallerklärung
  • Zusammenfassung der MySQL-Fremdschlüsseleinschränkungen und Tabellenbeziehungen
  • Beispielerklärung von MySQL-Fremdschlüsseleinschränkungen
  • Detaillierte Erläuterung der MySQL-Fremdschlüsseleinschränkungen
  • Einführung in die MySQL-Methode zum Löschen von Tabellendaten mit Fremdschlüsseleinschränkungen
  • So deaktivieren Sie die Überprüfung auf Fremdschlüsseleinschränkungen in untergeordneten MySQL-Tabellen
  • So erstellen und löschen Sie Fremdschlüsseleinschränkungen in MySQL

<<:  Super detaillierte Schritte zur Installation von Zabbix3.0 auf Centos7

>>:  js implementiert eine auf Canvas basierende Uhrkomponente

Artikel empfehlen

Beispiel für die Verwendung von rem zum Ersetzen von px in einem Vue-Projekt

Inhaltsverzeichnis Werkzeug Installieren Sie das ...

Verwandte Vorgänge zum Hinzufügen und Löschen von Indizes in MySQL

Inhaltsverzeichnis 1. Die Rolle des Index 2. Erst...

So verwenden Sie das Marquee-Tag im XHTML-Code

Im Forum habe ich gesehen, dass der Internetnutzer...

Detaillierte Erläuterung des Mysql Self-Join-Abfragebeispiels

Dieser Artikel beschreibt die Mysql-Self-Join-Abf...

Vue realisiert den Prozentbalkeneffekt

In diesem Artikel wird der spezifische Code von V...

Detaillierte Erläuterung der JavaScript-Closure-Probleme

Closures sind eines der traditionellen Features r...

Analysieren Sie CSS, um die Farbfunktion des Bildthemas zu extrahieren (Tipps)

Hintergrund Alles begann, als ein Klassenkamerad ...

...

Unterschied zwischen MySQL Btree-Index und Hash-Index

In MySQL werden die meisten Indizes (wie PRIMARY ...

So implementieren Sie das Prototypmuster in JavaScript

Überblick Das Prototypmuster bezieht sich auf den...