2017-11-30 2 views
0

Ich habe eine MySQL Tabelle mit der Bezeichnung User, wobei userid der Primärschlüssel ist. Wenn jemand versucht, einen Benutzer zu löschen, muss ich sehen, ob dieser Benutzer auf andere Tabellen verwiesen wird. Ich würde es vorziehen, nicht ein Dutzend verschiedene Fragen zu stellen und mich zu fragen, ob es eine information_schema Level-Überprüfung gibt.Abrufen von Datensätzen aus anderen Tabellen mit einem bestimmten Fremdschlüssel

Ich weiß, Sie können finden, welche Tabellen auf eine Spalte verweisen, aber gibt es eine Möglichkeit, welche Datensätze sind Referenz?

Um die Tabellen verweisen diese Tabelle/Spalte

SELECT * 
FROM 
    information_schema.KEY_COLUMN_USAGE 
WHERE 
    REFERENCED_TABLE_NAME = 'User' 
    AND REFERENCED_COLUMN_NAME = 'userid'; 

Antwort

1

von Ihnen hinterfragen es mir zu bekommen scheint dieser ein Anbieter-Datenbank sein kann. Ich habe viele, viele Tage damit zugebracht, Datenbanken zu durchsuchen, die nach ausländischen Referenzen in Anbieterdatenbanken suchen, in denen ich arbeite. Leider gibt es keinen dynamischen Weg, den ich gefunden habe, um alle ausländischen Referenzen für jedes Einfügen/Update/Löschen zu finden, und wenn Sie etwas automatisch tun könnte, wäre es wahrscheinlich viel teurer als mehrere Anweisungen zu Bedecke jeden Tisch.

Wenn das Design der Datenbank nicht verrückt ist, ist es wahrscheinlich, dass die fremden Spalten den gleichen Namen der Benutzer-ID verwenden (das ist ein BIG if). Sie könnten das information_schema durchsuchen, indem Sie nach allen Spalten mit dem Namen userid suchen. Dies würde eine Liste von Tabellen liefern, die für ausländische Referenzen genauer untersucht werden. Um ein noch breiteres Netz zu generieren, verwenden Sie NAME = 'userid' in der WHERE-Klausel, indem Sie NAME LIKE '% userid%' verwenden.

Eine andere Strategie, die ich in diesen Fällen verwendet habe, ist ein Datenbankvergleichstool. Da ich ein SQL Server-Typ bin, habe ich nur das integrierte Tool von Visual Studio verwendet, so dass ich keine spezifischen Empfehlungen für MySQL habe. Wenn Ihre Produktionsdatenbank nur wenig Aktivität aufweist, nehmen Sie zwei Sicherungen der Datenbank vor. Stellen Sie beide auf Ihrem Server unter verschiedenen Namen wieder her (wie 'test_vanilla' und 'test_change'). Zeigen Sie Ihre Anwendung auf die Datenbank "test_change", löschen Sie einen Benutzer, führen Sie das Vergleichstool für beide Datenbanken aus und sehen Sie, was sich geändert hat. Dies zeigt Ihnen, welche Tabellen in der Löschoperation getroffen wurden. Dies ist wahrscheinlich die langweiligste, aber wird Ihnen auch die endgültige und genaue Ergebnisse geben.

Hoffentlich zeigt das Sie in die richtige Richtung. Viel Glück!

Verwandte Themen