저는 데이터베이스의 어딘가에 Foo
의 값을 가진 varchar를 가지고 있는데, 정확히 어디 있는지 모르겠습니다.mysql의 데이터베이스에있는 모든 테이블에서 위치를 알 수없는 것을 선택하십시오.
이 콘텐츠의 모든 테이블과 모든 열을 검색하는 쿼리를 만들 수 있습니까? grep
저는 데이터베이스의 어딘가에 Foo
의 값을 가진 varchar를 가지고 있는데, 정확히 어디 있는지 모르겠습니다.mysql의 데이터베이스에있는 모든 테이블에서 위치를 알 수없는 것을 선택하십시오.
이 콘텐츠의 모든 테이블과 모든 열을 검색하는 쿼리를 만들 수 있습니까? grep
쉬운 방법은 없지만 정보 스키마를 사용하여 모든 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';
보다 진보 된 예제는 테이블 및 열 이름과 함께 결과 테이블에 일치 항목을 삽입 할 수 있습니다.
MySQL에 대한 저장 프로 시저가 있습니다 (http://forge.mysql.com/tools/tool.php?id=232). 출력 저장을위한 테이블을 만든 다음 information_schema 데이터베이스의 COLUMNS 테이블을 반복하여 모든 데이터베이스의 테이블과 열 이름을 가져옵니다. 그런 다음 조건에 맞는 적절한 검색 문자열을 사용하여 각 열에 대해 database.table에 대한 쿼리 () 쿼리를 실행합니다. count ()> 0 일 경우 해당 perticular 열에는 검색어가 있으므로 해당 세 겹 (데이터베이스 이름, 테이블 이름, 열 이름)을 테이블에 삽입합니다. 마지막 테이블에서 *를 선택하여 해당 데이터베이스 테이블과 검색 용어가있는 열 이름을 봅니다.
매우 간단한 방법으로 발견했습니다.
mysqldump -u user -p mydatabase | grep foo