[mysql] MySQL에서 SELECT 문을 사용하여 테이블 이름 가져 오기

MySQL에서는 다음을 사용하여 데이터베이스의 테이블을 나열 할 수 있다는 것을 알고 있습니다.

SHOW TABLES

그러나 이러한 테이블 이름을 다른 테이블에 삽입하려고합니다 (예 :

INSERT INTO metadata(table_name) SHOW TABLES /* does not work */

표준 SELECT 문을 사용하여 테이블 이름을 얻는 방법이 있습니까?

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */



답변

모든 테이블의 이름을 얻으려면 다음을 사용하십시오.

SELECT table_name FROM information_schema.tables;

특정 데이터베이스에서 테이블 이름을 얻으려면 다음을 사용하십시오.

SELECT table_name FROM information_schema.tables
WHERE table_schema = 'your_database_name';

이제 원래 질문에 대답하려면 다음 쿼리를 사용하십시오.

INSERT INTO table_name
    SELECT table_name FROM information_schema.tables
        WHERE table_schema = 'your_database_name';

자세한 내용은 다음을 참조 하십시오 : http://dev.mysql.com/doc/refman/5.0/en/information-schema.html


답변

시험:

select * from information_schema.tables

참조 : http://dev.mysql.com/doc/refman/5.0/en/information-schema.html


답변

여러 데이터베이스가 있고 특정 데이터베이스에 대한 모든 테이블을 선택해야하는 경우 TABLE_SCHEMA데이터베이스 이름을 다음과 같이 정의 하는 데 사용할 수 있습니다 .

select table_name from information_schema.tables where TABLE_SCHEMA='dbname';


답변

INFORMATION_SCHEMA 테이블을 사용하는 것 외에도 SHOW TABLES를 사용하여 테이블에 삽입하려면 다음을 사용하십시오.

<?php
 $sql = "SHOW TABLES FROM $dbname";
 $result = mysql_query($sql);
 $arrayCount = 0
 while ($row = mysql_fetch_row($result)) {
  $tableNames[$arrayCount] = $row[0];
  $arrayCount++; //only do this to make sure it starts at index 0
 }
 foreach ($tableNames as &$name {
  $query = "INSERT INTO metadata (table_name) VALUES ('".$name."')";
  mysql_query($query);
 }
?>


답변

TABLES데이터베이스 의 테이블 을 보십시오 information_schema. 다른 데이터베이스의 테이블에 대한 정보가 들어 있습니다. 그러나 공유 호스팅을 사용하는 경우 액세스 권한이 없을 수 있습니다.


답변

INFORMATION_SCHEMA TABLES에서 원하는 데이터를 얻을 수 있다고 생각합니다.

자세한 정보는 여기에서 찾을 수 있습니다 : http://dev.mysql.com/doc/refman/5.0/en/tables-table.html


답변

SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'DATABASE'