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

So optimieren Sie den Logikbeurteilungscode in JavaScript

Vorwort Zu den logischen Urteilsaussagen, die wir...

Lösung für MySQL-Replikationsfehler aufgrund voller Festplatte

Inhaltsverzeichnis Fallbeispiel Lösung des Proble...

Mit CSS3 lässt sich ein umdrehbarer Hover-Effekt erzielen

CSS3 implementiert einen umdrehbaren Hover-Effekt...

Grundsätze und Nutzungsdetails für MySQL 8.0-Benutzer- und Rollenverwaltung

Dieser Artikel beschreibt die Benutzer- und Rolle...

HTML-Grundlagen-Zusammenfassungsempfehlung (Textformat)

HTML-Tags zur Textformatierung 標簽 描述 <b> 定義...

Der neueste Linux-Installationsprozess von Tomcat8

Herunterladen https://tomcat.apache.org/download-...

Lassen Sie uns über den Unterschied zwischen MyISAM und InnoDB sprechen

Die Hauptunterschiede sind folgende: 1. MySQL ver...

So legen Sie den Fokus auf HTML-Elemente fest

Code kopieren Der Code lautet wie folgt: <Körp...

So führen Sie py-Dateien direkt unter Linux aus

1. Erstellen Sie zuerst die Datei (wechseln Sie p...