Der folgende Editor zeigt Ihnen eine einfache Implementierung von MySQL, bei der Fremdschlüsseleinschränkungen beim Löschen einer Tabelle ignoriert werden. Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Editor und werfen wir einen Blick darauf.
Das Löschen von Tabellen ist nicht besonders häufig, insbesondere bei Tabellen mit Fremdschlüsselzuordnungen. Seien Sie also beim Löschen vorsichtig. Während des Entwicklungsprozesses kommt es jedoch häufig vor, dass Probleme mit dem Schemadesign auftreten und alle Tabellen in der vorhandenen Datenbank gelöscht und neu erstellt werden. Darüber hinaus ist es beim Testen auch erforderlich, alle Tabellen in der Datenbank neu zu erstellen. Natürlich können dies auch viele automatisierte Tools.
Beim Löschen einer Tabelle wird manchmal diese Fehlermeldung angezeigt:
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
Dies liegt daran, dass die Tabelle, die Sie löschen möchten, Folgendes enthält: Das Feld wird als Fremdschlüssel in einer anderen Tabelle verwendet. Daher muss die Tabelle mit dem Fremdschlüssel (untergeordnete Tabelle) gelöscht werden, bevor diese Tabelle (übergeordnete Tabelle) gelöscht wird. Mit anderen Worten: Der Vorgang zum Löschen der Tabelle muss mit dem Vorgang zum Erstellen der Tabelle identisch sein.
Aber das ist oft inakzeptabel, wenn es zu viele Tabellen gibt, ist die manuelle Sortierung etwas inakzeptabel; andererseits gibt es kein automatisches Tool zum Sortieren (tatsächlich ist es das nicht). unmöglich). Daher stellt MySQL eine -Variable FOREIGN_KEY_CHECKS zur Verfügung, um festzulegen, ob Fremdschlüsseleinschränkungen bei Bedarf überprüft werden sollen.
Es wird allgemein empfohlen, Folgendes zu tun:
Generieren Sie zunächst automatisch alle DROP-Anweisungen und ersetzen Sie MyDatabaseName durch Ihren Datenbanknamen:
SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') FROM information_schema.tables WHERE table_schema = 'MyDatabaseName';
Dann fügen Sie die folgenden Anweisungen hinzu, um die Variable FOREIGN_KEY_CHECKS vor und nach dem generierten Code festzulegen:
SET FOREIGN_KEY_CHECKS = 0 -- DROP语句 SET FOREIGN_KEY_CHECKS = 1;
Es spielt jedoch keine Rolle, wenn Sie den letzten Satz vergessen, diese Variable ist basierend auf Session, d. h. wenn Sie den Client schließen und die Verbindung wiederherstellen, kehrt diese Variable auf den Standardwert zurück. Wenn Sie Fremdschlüsseleinschränkungen im globalen Bereich nicht überprüfen müssen (diese Situation wird relativ selten sein), können Sie Folgendes tun:
SET GLOBAL FOREIGN_KEY_CHECKS = 0;
oder
set @@global.FOREIGN_KEY_CHECKS = 0;
Das obige ist der detaillierte Inhalt vonCodebeispielfreigabe für MySQL zum Ignorieren von Fremdschlüsseleinschränkungen beim Löschen einer Tabelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!