MySQL

2009-09-05 1 views
9

में एक स्ट्रिंग के लिए संपूर्ण डेटाबेस खोजने का तरीका मैं एक MySQL डेटाबेस पर काम कर रहा हूं जो विशाल (लगभग 120 टेबल) है। मैं इसके बारे में कुछ समझने की कोशिश कर रहा हूं और यदि मैं एक स्ट्रिंग के लिए सभी 120 टेबल + कॉलम खोज रहा हूं तो यह एक बहुत बड़ा सौदा करने में मदद करेगा।MySQL

क्या यह एक MySQL डीबी पर करना संभव है?

+0

में एक स्ट्रिंग को खोजने के लिए मदद से आप चाहते हैं कि शुद्ध mysql में? यदि हां, तो मुझे नहीं लगता कि एक मौका है .. – yoda

+0

संभावित डुप्लिकेट [MySQL डेटाबेस की प्रत्येक तालिका से सभी फ़ील्ड में खोजें] (https://stackoverflow.com/questions/639531/search-in-all-fields -फ्रम-हर-टेबल-ऑफ-ए-माइस्क्ल-डेटाबेस) –

उत्तर

19

एक समाधान है, जो आप जो चाहते हैं वह नहीं हो सकता है। यदि आपने डेटा को फ़ाइल (mysqldump) में डेटा के साथ छोड़ दिया है, तो आप उस जानकारी को grep करने में सक्षम होंगे जो आप चाहते थे।

यह समय लेने वाली खोज क्वेरी की आवश्यकता को हटा देगा, और यह सबसे प्रभावी तरीका है जिसे मैं सोच सकता हूं।

आशा है कि इससे मदद मिलती है!

+0

धन्यवाद। उस बारे में सोचा नहीं था। मेरे पास sqldump था। – Omnipresent

+0

@Arun से उत्तर देखें - यदि आप mysqldump में --extended-insert जोड़ते हैं तो आपको प्रति पंक्ति एक डालने मिल जाएगी जिससे grep के साथ कुछ ढूंढना आसान हो जाता है – Richard

0

बस Omnipresent के उत्तर में जोड़ना चाहता था, जो एक डीबी खोजने के लिए एक वास्तविक तरीका है।

दुर्भाग्यवश, 99% समय, मेरा डीबी बड़ा है और औसत डंप में कुछ न्यूलाइन हैं, जिसका अर्थ है स्ट्रिंग के लिए grepping मैं एसक्यूएल फ़ाइल का विशाल बहुमत देता हूं।

अब मैं --टैब स्विच का उपयोग करना पसंद करता हूं जो एक तालिका में प्रति तालिका सीमित तालिका को एक डीबी में सीमित करता है। ।

इसका मतलब यह है न केवल मैं प्रत्येक पंक्ति में एक रिकॉर्ड मिलता है, लेकिन मैं जल्दी से मेज मेरे खोज शब्द में है प्राप्त कर सकते हैं कर

इस प्रयास करें:

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

tmp कहाँ एक खाली निर्देशिका आप है बनाया गया है

एक tmp की ls आप कुछ इस तरह देना होगा:

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

जहां एसक्यूएल फ़ाइलों को बनाने तालिका वाक्य रचना होते हैं, और txt डेटा है।

ध्यान दें कि टैब विकल्प mysql के चयन में आउटपुट का उपयोग करता है जिसका अर्थ है कि यह चाल कहीं भी नहीं बल्कि स्थानीयहोस्ट किया जा सकता है।

0

यूनिक्स मशीनों में, यदि डेटाबेस बहुत बड़ा नहीं है:

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

यह आपको पूरे डेटाबेस

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;