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


当前回答

这里有两个简单的代码。首先执行mysqldump:

mysqldump -uUSERNAME -p DATABASE_NAME > database-dump.sql

然后grep sqldump文件:

grep -i "Search string" database-dump.sql

也可以找到/替换并重新导入到数据库中。

其他回答

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

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

在phpMyAdmin的搜索功能是可用的:

选择特定的数据库而不是表。 点击“搜索”标签 输入你想要的搜索词 选择要搜索的表

phpMyAdmin屏幕截图:

'Search'特性也可以在MySQL Workbench中使用:

数据库菜单>查询表数据 选择要搜索的数据库和表(只会在选定的表中搜索) 在搜索中你可以使用wildChars。

MySQL Workbench屏幕截图:

这不是一个优雅的解决方案,但可以通过嵌套循环结构来实现

// select tables from database and store in an array

// loop through the array
foreach table in database
{
    // select columns in the table and store in an array

    // loop through the array
    foreach column in table
    {
        // select * from table where column = url
    }
}

您可以通过在构建列数组时检查哪些列包含字符串,以及将每个表的所有列合并在一个用逗号分隔的WHERE子句中来加快此过程。

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  ;

这里有两个简单的代码。首先执行mysqldump:

mysqldump -uUSERNAME -p DATABASE_NAME > database-dump.sql

然后grep sqldump文件:

grep -i "Search string" database-dump.sql

也可以找到/替换并重新导入到数据库中。