जुलाई 2012 में वापस मैंने यह पोस्ट लिखी
एक mysql db के सभी तालिकाओं और क्षेत्रों में पाठ को खोजने और बदलने की क्वेरी
यह तालिका का उपयोग करता information_schema.columns हर CHAR, VARCHAR, और पाठ क्षेत्र लेने और एक टेक्स्ट का प्रदर्शन करने के लिए REPLACE ।
कृपया मेरी पुरानी लिंक देखें और खोज करने के लिए इसके प्रतिमान का उपयोग करें।
एक उदाहरण के रूप में, यह प्रत्येक तालिका में प्रत्येक पाठ कॉलम के लिए एक अलग चयन बनाएगा
SELECT
CONCAT('SELECT ',QUOTE(db),',',QUOTE(tb),',',QUOTE(col),',COUNT(1) FieldHasIt
FROM ',db,'.',tb,' WHERE \`',col,'\`=''',SearchString,''';') SearchSQL
FROM
(
SELECT table_schema db,table_name tb,column_name col FROM information_schema.columns
WHERE table_schema = 'mydb' AND
(column_type LIKE 'char(%' OR column_type LIKE 'varchar(%' OR column_type LIKE '%text')
) A,(SELECT 'Hello' SearchString) B;
इसके साथ एक विशालकाय एसक्यूएल पाठ फ़ाइल बनाएँ। फिर, उस विशाल एसक्यूएल स्क्रिप्ट को निष्पादित करें:
SQL="SELECT CONCAT('SELECT ',QUOTE(db),',',QUOTE(tb),',',"
SQL="${SQL} QUOTE(col),',COUNT(1) FieldHasIt FROM ',db,'.',tb,'"
SQL="${SQL} WHERE \`',col,'\`=''',SearchString,''';') SearchSQL FROM"
SQL="${SQL} (SELECT table_schema db,table_name tb,column_name col FROM"
SQL="${SQL} information_schema.columns WHERE table_schema='store_qa'"
SQL="${SQL} AND (column_type LIKE 'char(%' OR column_type LIKE 'varchar(%'"
SQL="${SQL} OR column_type LIKE '%text')) A,(SELECT 'Hello' SearchString) B;"
mysql -uroot -p... -ANe"${SQL}" > MegaSearch.sql
mysql -uroot -p... -AN < MegaSearch.sql > MegaSearchResults.txt
RESULTS_FOUND=`grep -c "1$" < MegaSearchResults.txt`
echo ${RESULTS_FOUND}
if [ ${RESULTS_FOUND} -gt 0 ] ; then grep "1$" < MegaSearchResults.txt ; fi
आउटपुट आपको डेटाबेस, टेबल और कॉलम बताता है जिसमें डेटा दिखाई देता है।
कोशिश करो !!!।
संपादित करें:
CONCAT('SELECT ',QUOTE(db),',',QUOTE(tb),',',QUOTE(col),',COUNT(1) FieldHasIt
FROM ',db,'.',tb,' WHERE \`',col,'\`=''',SearchString,''';')
SHOULD: टेबल्स के लिए नीचे दिखाए गए दो बैक टिक्स जोड़ें, जिनके नाम में एक स्थान है।
db,'.`',tb,'`',' WHERE