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


260

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? */

답변:


381

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

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


144

시험:

select * from information_schema.tables

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


4
이것은 올바른 방향을 가리 키지 만 실제로 질문에 대답하지는 않습니다. 더 정교하게 만들 수 있습니다.
Murilo Garcia

@MuriloGarcia information_schema는 SQL 표준의 일부입니다. Postgres도 있습니다. SQLite의 경우sqlite_master
peterchaula

LIKE를 사용하여 이름별로 테이블을 가져 오는 중 : SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE '% keyword %';
Jarrett Barnett

19

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

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


12

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);
 }
?>

8

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



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

3
답변에 더 많은 컨텍스트를 추가하도록 요청하십시오. 코드 전용 답변은 이해하기 어렵습니다. 게시물에 더 많은 정보를 추가 할 수 있다면 독자와 미래 독자 모두에게 도움이됩니다.
RBT

4

MySQL INFORMATION_SCHEMA.TABLES테이블에는 테이블이 아닌 임시 테이블과 뷰에 대한 데이터가 포함됩니다. 열 TABLE_TYPE은 이것이 테이블 또는 뷰에 대한 레코드인지를 정의합니다 (테이블 TABLE_TYPE='BASE TABLE'및 뷰에 대한 TABLE_TYPE='VIEW'). 따라서 스키마 (데이터베이스) 테이블에서보고 싶다면 다음 쿼리 만 있습니다.

SELECT *
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='myschema'

2

특정 단어가 포함 된 테이블을 선택하려면 SELECT(대신에 SHOW) 대신 사용하여 쉽게 할 수 있다고 지적하면 도움이 될 수 있습니다 . 아래 쿼리는 "키워드"가 포함 된 테이블로 쉽게 검색 범위를 좁 힙니다.

SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"

0

테이블 이름을 얻는 또 다른 간단한 방법이 있습니다

SHOW TABLES FROM <database_name>

2
이것은 전혀 질문에 대답하지 않습니다.
Mike Chamberlain

질문의 제목에 맞는 것을 검색 할 때 도움이되었습니다.
Shihe Zhang

아니요. mysql 도구의 테이블 만 보여주기 때문에 좋지 않습니다.
TS

0

이 아래 쿼리는 저에게 효과적이었습니다. 데이터베이스, 테이블, 열 이름, 데이터 유형 및 열 수를 표시 할 수 있습니다.

**select table_schema Schema_Name ,table_name TableName,column_name ColumnName,ordinal_position "Position",column_type DataType,COUNT(1) ColumnCount
FROM information_schema.columns
GROUP by table_schema,table_name,column_name,ordinal_position, column_type;**

-3

삽입, 업데이트 및 삭제하려면 다음을 수행하십시오.

$teste = array('LOW_PRIORITY', 'DELAYED', 'HIGH_PRIORITY', 'IGNORE', 'INTO', 'INSERT', 'UPDATE', 'DELETE', 'QUICK', 'FROM');
$teste1 = array("\t", "\n", "\r", "\0", "\x0B");
$strsql = trim(str_ireplace($teste1, ' ', str_ireplace($teste, '', $strsql)));
$nomeTabela = substr($strsql, 0, strpos($strsql, ' '));

print($nomeTabela);
exit;

우리는 여기 영어를 기대합니다. 그러나 pt.stackoverflow.com
Laurel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.