Mysql 数据库模糊查询定位

        接手一个成旧的项目进行二次开发,没有文档,什么都需要自己去查找,很是费时间。这次我接手一个java项目,但是只有数据库,源码我暂时又看不到,想删除测试数据,只有找他们(业务太复杂)。但是他们也删除不完全,无奈我只有慢慢的去数据库查看是哪个表哪个字段的查询,费时费力。 百度了mysql 的数据库全表查询,好像是没有找到现成的,只有自己动手了。

       好了,废话不多说进入主题。

       information_schema数据库有一个COLUMNS表,它存储所有表字段信息,我们通过通过查询表中数据库名,来获取该数据库下的所表结构信息。同时,还需要读者自己熟悉一下mysql 游标的操作。

       

       

BEGIN
	
	DECLARE num int;
	DECLARE tableName,columnName,searchSql VARCHAR(500);
	DECLARE done INT DEFAULT FALSE; -- 自定义控制游标循环变量,默认false  
	DECLARE databaseName VARCHAR(500) DEFAULT 'test';
	DECLARE rs CURSOR FOR SELECT TABLE_NAME,COLUMN_NAME FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA =databaseName;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;-- 绑定控制变量到游标,游标循环结束自动转true  

	/* 打开游标 */
        OPEN rs;
	
	/* 创建零时表 */

	DROP TABLE  IF EXISTS tmp;

	CREATE TEMPORARY TABLE tmp(
		tablname VARCHAR(500),
		columnname varchar(500),
		selectsql VARCHAR(500)
	);

	/* 逐个取出字段的值,需要进行最大值的判断 */
	FETCH rs INTO tableName,columnName;

	REPEAT

		/* 遍历数据表 */
		IF NOT done THEN
			SET @searchSql=CONCAT('SELECT count(*) into @tmp_num FROM ','`',databaseName,'`','.',tableName,' WHERE ','`',columnName,'`',' LIKE ',' "%fff%" ');
		
			PREPARE stm FROM @searchSql;
			EXECUTE  stm;
			DEALLOCATE PREPARE stm;
		
			SET num=@tmp_num;
		
			IF  num THEN
				INSERT INTO tmp(tablname,columnname,selectsql) VALUES(tableName,columnname,@searchSql);
			END IF;
     
    END IF;  

		FETCH rs INTO tableName,columnName;
 
   UNTIL done END REPEAT;


   /* 关闭游标 */
   CLOSE rs;
	
   /* 查询到的数据 */
   SELECT * FROM tmp;


END


      给了大家一个思路,里面实现的有一些粗糙,请根据自己实际情况做相应的修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值