Dieser Beitrag ist auch verfügbar auf: Español (Spanisch) English (Englisch)

Wie viele haben das nicht schon erlebt, dass eine Spalte in einer Datenbanktabelle ändern oder löschen wollen und es ist nicht möglich, weil die Spalte ein Fremdschlüssel ist, der in einem Constraint verwendet wird? Egal, ob man Xampp, MySql Workbench oder ein anderes Tool verwendet, und egal was man tut, die Spalte ist eingeschränkt und kann daher nicht geändert werden. Ich bin sicher, das es schon vielen passiert ist, besonders wenn man gerade erst anfängt Sql und Datenbankmodellierung zu verstehen… Auch für mich 😉 Deshalb möchte ich hier eine sehr einfache Lösung für den Fall vorstellen, dass jemand darunter leidet 😉

Die Lösung besteht darin, die Fremdschlüsselprüfung mit „SET FOREIGN_KEY_CHECKS“ zu deaktivieren.

Stellen Sie sich vor, Sie haben zwei Tabellen, „client“ und „person„, die durch eine externe Schlüsselbeschränkung „fk_client_person_idx“ verknüpft sind. Diese wären die Schritte, um die Beschränkung aufzuheben und die Definition der Spalte ändern zu können:

1. SET FOREIGN_KEY_CHECKS = 0;

2. LOCK TABLES 
    cliente WRITE,
    persona WRITE;

3. ALTER TABLE cliente
    DROP FOREIGN KEY fk_client_persona_idx;

4. SET FOREIGN_KEY_CHECKS = 1;

Im ersten Schritt deaktivieren wir die Einschränkungen. In Schritt 2 blockieren wir dann die Tabelle, in Schritt 3 entfernen wir die Einschränkung und schließlich, in Schritt 4, aktivieren wir die Einschränkungen wieder. Das ist es!

Bitte beachten Sie jedoch, dass es sich hierbei nicht um eine gute Praxis in Produktionsumgebungen handelt, sondern eher um ein Werkzeug, das während der Entwicklungszeit eingesetzt werden sollte. Wenn Sie es jedoch in der Produktion tun müssen, vergessen Sie bitte nicht, zuerst ein Backup zu machen 😉

Saludos
@Rafa