我试图弄清楚如何在数据库中定位一个url的所有事件。我想搜索所有表和所有字段。但我不知道从哪里开始,甚至不知道是否有可能。


当前回答

您可以通过使用HeidiSQL而不生成Db转储来实现这一点

步骤:

1)在GUI左侧面板中选择需要搜索的数据库。

2)导出>导出数据库为SQL

3)在表格工具窗口中选择“查找文本”选项卡。

4)提供你的字符串进行搜索,然后点击“FIND”。

5)它将列出所有包含我们字符串的表。

6)选择相关度%较高的行。

7)点击“查看结果”

其他回答

我正在寻找相同的,但找不到它,所以我在PHP中做了一个小脚本,你可以在: http://tequilaphp.wordpress.com/2010/07/05/searching-strings-in-a-database-and-files/

好运! (我删除了一些私人代码,如果我没有在这个过程中破坏它,请告诉我:D)

一个简单的解决方案是这样做的:

mysqldump -u myuser --no-create-info --extended-insert=FALSE databasename | grep -i "<search string>"

SQLyog是基于GUI的解决方案,可以跨所有列、表和数据库进行数据搜索。用户可以自定义搜索,将其限制为字段、表和数据库。

在它的数据搜索功能中,用户可以像使用谷歌一样搜索字符串。

MikeW提出了一个有趣的解决方案,但正如评论中提到的,它是一个SQL Server解决方案而不是MySQL解决方案。下面是一个MySQL解决方案:

use information_schema;
set @q = 'Boston';
set @t = 'my_db';

select CONCAT('use \'',@q,'\';') as q UNION
select CONCAT('select \'', tbl.`TABLE_NAME`,'\' as TableName, \'', col.`COLUMN_NAME`,'\' as Col, `',col.`COLUMN_NAME`,'` as value  from `' , tbl.`TABLE_NAME`,'` where `' ,
        col.`COLUMN_NAME` , '` like \'%' ,@q,  '%\' UNION') AS q
from `tables` tbl
inner join `columns` col on tbl.`TABLE_NAME` = col.`TABLE_NAME`and col.DATA_TYPE='varchar'
where tbl.TABLE_SCHEMA  =  @t  ;

Scott给出了一个很好的例子,但问题是你为什么要这么做?如果您需要对特定字符串执行查找-替换操作,您还可以尝试对数据库执行mysqldump,在编辑器中执行查找-替换操作,然后重新加载数据库。

也许如果你给出一些你想要达到的目标的背景,其他人可能会提供更好的答案。