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
これは正しい方向を指していますが、実際に質問に答えるものではありません。さらに詳しく説明できます。
ムリロガルシア2016

@MuriloGarcia information_schemaは、SQL標準の一部です。Postgresにもあります。SQLiteの場合、次の場所を調べますsqlite_master
peterchaula 2017年

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 2017年

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.