Heim > Datenbank > MySQL-Tutorial > Hauptteil

Codebeispielfreigabe für MySQL zum Ignorieren von Fremdschlüsseleinschränkungen beim Löschen einer Tabelle

黄舟
Freigeben: 2017-03-18 13:57:27
Original
1552 Leute haben es durchsucht

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
Nach dem Login kopieren

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';
Nach dem Login kopieren

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

oder

set @@global.FOREIGN_KEY_CHECKS = 0;
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!