2016-10-26 7 views
0

table_schema='foo' (데이터베이스 이름)이있는 각 테이블의 show index이 필요합니다. 오류에서 알 수없는 테이블 'table_name'in information_schema

mysql> show index from table_name from information_schema.tables where table_schema='foo'; 
ERROR 1109 (42S02): Unknown table 'table_name' in information_schema 

, 나는 쿼리가 information_schema의 테이블로 'table_name' 취급 것을 알 수있다. 'table_name'을 열로 처리하도록 쿼리를 다시 작성하면 information_schema.tables에 있습니까?

+0

나는 이것이 당신이 찾고있는 것이라고 믿는다 : http://stackoverflow.com/questions/5213339/how-to-see-indexes-for-a-database-or-table – commanderZiltoid

+0

왜 당신은 ' from table_name from'은 유효한 구문입니까? 그것은 받아 들일 수있는 것에는 가깝지 않습니다. –

답변

0

당신이 잘못 접근하고 있으며 존재하지 않는 구문을 구성하고 있습니다.

색인을 얻는 방법은 INFORMATION_SCHEMA.STATISTICS 테이블을 읽는 것이고 TABLES 테이블은 읽지 않는 것이 좋습니다.

다음 쿼리는 SHOW INDEXES과 같은 열이 있습니다

당신은 "INDEXES"하지만 실제로는 인덱스 오브젝트에 대한 시스템 테이블의 이름은 "통계"라는 I_S 테이블이 있어야한다 생각
SELECT table_name AS `Table`, Non_unique, index_name AS Key_name, 
    Seq_in_index, Column_name, Collation, Cardinality, Sub_part, 
    Packed, Nullable, Index_type, Comment, Index_comment 
FROM INFORMATION_SCHEMA.STATISTICS 
WHERE table_schema = 'foo'; 

. 그림을 이동.

+0

이것은 내 원하는 결과를 제공합니다. 그러나 프로그래밍 방식으로 모든 테이블을 모두 입력하는 대신 모든 테이블을 가져 오는 방법이 있습니까? 또한 귀하의 질의가 더 나은 접근법이라는 것을 알고 있지만, 원래 내가하려고했던 것에 대한 구문이 있습니까? 기본적으로 다른 쿼리에서 반환 된 목록의 각 항목에 대해 쿼리를 실행합니다. – onepiece

+0

아니요, 다른 쿼리의 결과를 테이블 목록으로 가져 오는 'SHOW INDEXES'구문은 없습니다. 당신은 테이블의 목록을 얻기 위해 쿼리를 실행해야하고, 두 번째 단계는'SHOW INDEXES ... '문으로 동적 SQL 쿼리를 빌드해야합니다. –