En juillet 2012, j'ai écrit ce message
Requête pour trouver et remplacer du texte dans toutes les tables et tous les champs d'une base de données mysql
Il utilise la table information_schema.columns pour récupérer tous les champs CHAR, VARCHAR et TEXT et effectuer un REMPLACEMENT textuel .
Veuillez regarder mon ancien lien et utiliser son paradigme pour faire une recherche.
Par exemple, cela créera un SELECT distinct pour chaque colonne de texte dans chaque tableau
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;
Créez un fichier texte SQL géant avec. Ensuite, exécutez ce script Giant SQL:
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
La sortie vous indique la base de données, la table et la colonne dans lesquelles les données apparaissent.
Essaie !!!.
ÉDITER:
CONCAT('SELECT ',QUOTE(db),',',QUOTE(tb),',',QUOTE(col),',COUNT(1) FieldHasIt
FROM ',db,'.',tb,' WHERE \`',col,'\`=''',SearchString,''';')
DEVRAIT: ajouter les deux graduations ci-dessous pour les tableaux qui ont un espace dans le nom.
db,'.`',tb,'`',' WHERE