2009-09-05 13 views
9

Pracuję nad bazą danych MySQL, która jest ogromna (około 120 tabel). Staram się nadać temu sens i bardzo mi to pomoże, jeśli przeszukuję wszystkie stoły i kolumny w liczbie 120 dla szukanego ciągu.sposób wyszukiwania całej bazy danych na ciąg znaków w MySQL

Czy można to zrobić z bazą danych MySQL DB?

+0

Chcesz że w czystej mysql? jeśli tak, to nie sądzę, że jest szansa .. – yoda

+0

Możliwy duplikat [Szukaj we wszystkich polach z każdej tabeli bazy danych MySQL] (https://stackoverflow.com/questions/639531/search-in-all-fields -z-każdej-tabeli-of-a-mysql-bazy danych) –

Odpowiedz

19

Istnieje jedno rozwiązanie, które może nie być tym, czego potrzebujesz. Jeśli zrzuciłeś tabelę do pliku (mysqldump) z danymi, będziesz mógł odszukać wszystkie informacje, które z niej chcesz.

Usunąłoby to konieczność czasochłonnych zapytań i jest najbardziej efektywnym sposobem, jaki mogę wymyślić.

Mam nadzieję, że to pomoże!

+0

dzięki. Nie myślałem o tym. Miałem sqldump. – Omnipresent

+0

Zobacz odpowiedź z @Arun - jeśli dodasz --extended-insert do mysqldump, otrzymasz jedną wstawkę na linię, co ułatwi znalezienie czegoś z grep – Richard

0

Po prostu chciałem dodać do odpowiedzi Omnipresent, która jest de facto sposobem przeszukiwania bazy danych.

Niestety, w 99% przypadków, moja db jest ogromna, a średnia liczba zrzutów ma kilka nowych linii, co oznacza, że ​​grepping dla napisu, który chcę, zwraca ogromną większość pliku sql.

Teraz wolę użyć przełącznika --tab, który tworzy plik txt rozdzielany tabulatorami na tabelę w bazie danych. .

Oznacza to nie tylko mogę dostać jeden rekord w każdym wierszu, ale można szybko dostać tabeli wyszukiwanych haseł w

Spróbuj tego:

mysqldump -u user_name -p database_name --tab=tmp 

Gdzie tmp jest pusty katalog ty "Stworzyłem.

An ls TMP dałby ci coś takiego:

users.sql 
users.txt 
orders.sql 
orders.txt 

gdzie SQL pliki zawierają składnię tabeli tworzenia i txt zawierają dane.

Zauważ, że opcja zakładki używa mysql SELECT INTO OUTFILE, co oznacza, że ​​tej sztuczki nie można zrobić nigdzie poza localhost.

0

W maszynach uniksowych, jeśli baza danych nie jest zbyt duży:

mysqldump -u <username> -p <password> <database_name> --extended=FALSE | grep <String to search> | less -S 
2

To pomoże Ci znaleźć ciąg w całej bazy danych

DELIMITER ## 
CREATE PROCEDURE sp_search1(IN searchstring INT) 
BEGIN 
DECLARE done INT DEFAULT FALSE; 
DECLARE output TEXT; 
    DECLARE table_name TEXT; 
    DECLARE column_name TEXT; 
DECLARE s TEXT; 
DECLARE searchcursor CURSOR FOR 
SELECT table_name,column_name FROM information_schema.columns AS column  
ORDER BY table_name,ordinal_position; 
OPEN searchcursor; 
PREPARE stmt2 FROM 'select * from ? where ? = ?' ; 
search_loop : LOOP 
IF done THEN 
LEAVE search_loop; 
END IF;    
FETCH searchcursor INTO table_name,column_name; 
IF( EXECUTE stmt2 USING table_name, column_name,searchstring) THEN 
INSERT INTO `table_names`(`table_name`) VALUES(@table_name);  
    END IF; 
END LOOP; 
END; 
Powiązane problemy