Hledání textu v celé MySQL databázi

Jak najít "nějaký text" ve všech databázích na serveru.
SELECT CONCAT('SELECT * FROM ', TABLE_SCHEMA, '.', TABLE_NAME, 
              ' WHERE ', COLUMN_NAME, ' LIKE '%nějaký text%';') 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA != 'mysql' AND TABLE_SCHEMA != 'performance_schema' 
AND TABLE_SCHEMA != 'innodb' AND TABLE_SCHEMA != 'information_schema';
Vypíše seznam SQL dotazů pro všechny možnosti.

V ideálním případě stačí zkopírovat dotazy.
Pokud jich je mnoho a chceme dotazy pouze pro některou z databází, vyexportujeme výsledek například ve formátu CSV pro Excel a použijeme pouze řádky pro danou databázi.

SQL dotazy zkopírujeme do phpMyAdminu (vložit SQL dotaz).


Popřípadě můžeme vytvořit funkci pro hledání.
DROP PROCEDURE IF EXISTS findAll;
CREATE PROCEDURE `findAll`( IN `tableName` VARCHAR( 28 ) , IN `search` TEXT )
BEGIN
       DECLARE finished INT DEFAULT FALSE ;
       DECLARE columnName VARCHAR ( 28 ) ;
       DECLARE stmtFields TEXT ;
       DECLARE columnNames CURSOR FOR
              SELECT DISTINCT `COLUMN_NAME` FROM `information_schema`.`COLUMNS`
              WHERE `TABLE_NAME` = tableName ORDER BY `ORDINAL_POSITION` ;
       DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;
       SET stmtFields = '' ;
       OPEN columnNames ;
       readColumns: LOOP
              FETCH columnNames INTO columnName ;
              IF finished THEN
                     LEAVE readColumns ;
              END IF;
              SET stmtFields = CONCAT(
                     stmtFields , IF ( LENGTH( stmtFields ) > 0 , ' OR' , ''  ) ,
                     ' `', tableName ,'`.`' , columnName , '` REGEXP "' , search , '"'
              ) ;
       END LOOP;
       SET @stmtQuery := CONCAT ( 'SELECT * FROM `' , tableName , '` WHERE ' , stmtFields ) ;
       PREPARE stmt FROM @stmtQuery ;
       EXECUTE stmt ;
       CLOSE columnNames ;
END;

Vloženo: 25.07.2017
Aktualizováno: 25.07.2017




© ABC123.EU

Články v jiném jazyce
Jazyk: