Выберите что-то с неизвестным местоположением из всех таблиц в базе данных в MySQL - PullRequest
1 голос
/ 09 февраля 2011

У меня есть varchar со значением скажем Foo где-то в моей базе данных, и я не знаю, где именно.

Можно ли создать запрос, который будет искать все таблицы и все столбцы дляэто содержание?Аналогично grep

Ответы [ 3 ]

1 голос
/ 09 февраля 2011

Нет простого способа сделать это, но вы можете использовать информационную схему, чтобы найти все ваши столбцы varchar.

SELECT table_name, column_name 
FROM information_schema.columns
WHERE data_type = 'varchar';

Затем вы можете написать запрос, чтобы получить список запросов, которые вам нужно будет выполнить для поиска вашего термина.

SELECT CONCAT(
    'select ', column_name, 
    ' from ', table_name, 
    ' where ', column_name, ' like \'%foo%\''
) AS stmt
FROM information_schema.columns
WHERE data_type = 'varchar';

Более сложный пример может вставить совпадения в таблицу результатов вместе с именами таблиц и столбцов.

0 голосов
/ 09 февраля 2011

Я нашел очень простой способ сделать это.

mysqldump -u user -p mydatabase | grep foo

0 голосов
/ 09 февраля 2011

Здесь есть хранимая процедура (http://forge.mysql.com/tools/tool.php?id=232) для MySQL, которая создаст таблицу для хранения вывода, а затем перебирает таблицу COLUMNS базы данных information_schema для получения всех имен таблиц и столбцов базы данных. Затем выполните count (* 1003) *) запрос к базе данных database.table для каждого столбца с соответствующей строкой поиска в условии условия. Если число ()> 0, то в этом столбце перкулярной области есть условие поиска, поэтому он вставит триплет (имя базы данных, имя таблицы, столбец). name) в таблицу. Last Select * from table для просмотра соответствующей таблицы базы данных и имен столбцов, имеющих поисковый запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...