Mam 2-3 różne nazwy kolumn, które chcę wyszukać w całej bazie danych i wypisać wszystkie tabele zawierające te kolumny. Jakiś prosty skrypt?
mysql
information-schema
Jobi Joy
źródło
źródło
Odpowiedzi:
Aby uzyskać wszystkie tabele z kolumnami
columnA
lubColumnB
w bazie danychYourDatabase
:źródło
DATABASE()
zamiast ciągu znaków do wyszukiwania w aktualnie wybranej bazie danych.źródło
TABLE_SCHEMA
do pól zestawu zwrotnego, aby wyświetlić wszystkie bazy danych + tabele zawierające tę kolumnę.show tables;
. Czy ktoś może wyjaśnić, dlaczego tak się dzieje?Po prostu zrobione w jednym wierszu SQL:
źródło
źródło
W wersji, która nie ma
information_schema
(starszych wersji lub niektórych ndb), możesz zrzucić strukturę tabeli i ręcznie przeszukać kolumnę.Teraz wyszukaj nazwę kolumny
some_file.sql
za pomocą preferowanego edytora tekstów lub użyj sprytnych skryptów awk.I prosty skrypt sed, aby znaleźć kolumnę, wystarczy zastąpić COLUMN_NAME swoim:
Możesz przesłać zrzut bezpośrednio do sed, ale to banalne.
źródło
Dla tych, którzy szukają odwrotności tego, tj. Szukają tabel, które nie zawierają określonej nazwy kolumny, oto zapytanie ...
Przydało się to naprawdę, gdy zaczęliśmy powoli wdrażać specjalną
ai_col
kolumnę InnoDB i potrzebowaliśmy dowiedzieć się, który z naszych 200 tabel wymagał jeszcze aktualizacji.źródło
Jeśli chcesz „ Aby uzyskać tylko wszystkie tabele ”, użyj tego zapytania:
Jeśli chcesz „ Aby uzyskać wszystkie tabele z kolumnami ”, użyj tego zapytania:
źródło
Użyj tego jednowierszowego zapytania, zamień żądaną nazwę_kolumny na nazwę kolumny.
źródło
źródło
Problem z Information_schema polega na tym, że może być strasznie powolny. Szybciej jest używać poleceń POKAŻ.
Po wybraniu bazy danych najpierw wysyłasz zapytanie POKAŻ TABELE. A potem robisz POKAŻ KOLUMNY dla każdego ze stolików.
W PHP wyglądałoby to mniej więcej tak
źródło
To ^^ otrzyma tabele z Kolumną A ORAZ Kolumną B zamiast Kolumny A LUB Kolumny B, podobnie jak zaakceptowana odpowiedź
źródło