Search text in fields in every table of a MySQL database

前端 未结 24 2105
梦谈多话
梦谈多话 2020-11-22 06:23

I want to search in all fields from all tables of a MySQL database a given string, possibly using syntax as:

SELECT * FROM * WHERE * LIKE \'%stuff%\'
         


        
24条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-22 06:49

    Here is my solution for this

    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;
    

提交回复
热议问题