Zum Hauptinhalt springen
Shopware

Shopware 6 Update: Foreign-Key-Constraint Fehler lösen

Foreign-Key-Constraint-Fehler gehören zu den häufigsten Stolpersteinen bei Shopware 6 Updates. Sie entstehen durch inkonsistente Daten – etwa wenn Produkte auf gelöschte Kategorien verweisen. In diesem Beitrag zeige ich dir, wie du diese Probleme systematisch findest und behebst.

Shopware 6 MySQL Migration Foreign Key Troubleshooting

Das Problem

Typische Fehlermeldungen:

SQLSTATE[23000]: Integrity constraint violation:
Cannot add or update a child row:
a foreign key constraint fails

Oder:

Cannot delete or update a parent row: a foreign key constraint fails

Die Migration versucht Datensätze zu ändern oder zu löschen, aber es existieren noch Referenzen auf diese Daten. MySQL verhindert die Operation, um Datenintegrität zu gewährleisten.

Häufig betroffene Tabellen

Verwaiste Referenzen treten besonders häufig in diesen Tabellen auf:

- product – Produkte mit ungültigen Referenzen

  • product_visibility – Sichtbarkeitseinträge für gelöschte Produkte

    • product_category – Zuordnungen zu nicht existierenden Kategorien

      • media – Referenzen auf gelöschte Medien

        • cms_slot – CMS-Elemente mit fehlenden Abhängigkeiten

          Typische Szenarien:

          • Produkt verweist auf gelöschte Kategorie

            • Media-ID existiert nicht mehr

              • Plugin hat beim Deinstallieren nicht sauber aufgeräumt

                • Manueller SQL-Eingriff ohne Berücksichtigung von Abhängigkeiten

Verwaiste Datensätze finden

Beispiel: Produkt-Kategorie-Zuordnungen ohne gültige Kategorie

SELECT pc.*
FROM product_category pc
LEFT JOIN category c ON c.id = pc.category_id
WHERE c.id IS NULL;

Beispiel: Produkte ohne gültigen Hersteller

SELECT p.id, p.product_number
FROM product p
LEFT JOIN product_manufacturer m ON m.id = p.manufacturer_id
WHERE p.manufacturer_id IS NOT NULL
  AND m.id IS NULL;

Beispiel: Media-Referenzen ohne Media-Eintrag

SELECT p.id, p.product_number, p.cover_id
FROM product p
LEFT JOIN media m ON m.id = p.cover_id
WHERE p.cover_id IS NOT NULL
  AND m.id IS NULL;

Lösung: Verwaiste Daten bereinigen

Option A: Verwaiste Zuordnungen löschen

-- Produkt-Kategorie-Zuordnungen ohne Kategorie entfernen
DELETE pc FROM product_category pc
LEFT JOIN category c ON c.id = pc.category_id
WHERE c.id IS NULL;

Option B: Ungültige Referenzen auf NULL setzen

-- Ungültige Hersteller-Referenz entfernen
UPDATE product p
LEFT JOIN product_manufacturer m ON m.id = p.manufacturer_id
SET p.manufacturer_id = NULL
WHERE p.manufacturer_id IS NOT NULL
  AND m.id IS NULL;

Danach Migration erneut starten:

php bin/console database:migrate --all

Notfall-Bypass (nur temporär!)

Wenn du schnell weiterkommen musst und die Datenintegrität später reparierst:

-- FK-Checks deaktivieren
SET FOREIGN_KEY_CHECKS = 0;

-- Migration laufen lassen -- php bin/console database:migrate --all

-- FK-Checks wieder aktivieren SET FOREIGN_KEY_CHECKS = 1;

Wichtig: Dies ist nur ein temporärer Workaround! Danach unbedingt:

# DAL-Validierung ausführen
php bin/console dal:validate

Die DAL-Validierung zeigt dir alle inkonsistenten Daten an, die du dann gezielt bereinigen kannst.

Prävention: Datenintegrität prüfen

Vor jedem Update:

# DAL-Validierung ausführen
php bin/console dal:validate

Regelmäßige Checks einplanen:

  • Nach Plugin-Deinstallationen

    • Nach manuellen Datenbank-Eingriffen

      • Vor Major-Updates

        Best Practice:

        • Plugins immer sauber über die Admin-Oberfläche deinstallieren

          • Keine direkten SQL-DELETEs auf Haupttabellen ohne Prüfung der Abhängigkeiten

            • Vor Updates immer ein vollständiges Datenbank-Backup erstellen

Fazit

Foreign-Key-Constraint-Fehler sind ein Zeichen für inkonsistente Daten in deiner Shopware-Datenbank. Die Lösung ist systematisch:

1. Verwaiste Datensätze identifizieren mit LEFT JOIN Queries 2. Daten bereinigen durch Löschen oder NULL-Setzen 3. Migration erneut starten 4. DAL-Validierung zur Kontrolle ausführen

Mit diesem Vorgehen löst du die meisten FK-Constraint-Probleme innerhalb von Minuten. Brauchst du Unterstützung bei einem hartnäckigen Fall? Als Shopware-Entwickler helfe ich dir gerne.

MH

Matthias Hanske

Shopware 6 Fullstack Developer

Ich helfe E-Commerce-Unternehmen dabei, das volle Potenzial aus ihrem Shopware-Shop herauszuholen.

Brauchst du Hilfe bei deinem Shopware-Projekt?

Ich unterstütze dich gerne bei Updates, Migrationen und Entwicklung.