Dapatkan nama tabel menggunakan pernyataan SELECT di MySQL

260

Di MySQL, saya tahu saya bisa daftar tabel dalam database dengan:

SHOW TABLES

Namun, saya ingin memasukkan nama tabel ini ke tabel lain, misalnya:

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

Apakah ada cara untuk mendapatkan nama tabel menggunakan pernyataan SELECT standar, sesuatu seperti:

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */
Mike Chamberlain
sumber
kemungkinan duplikat stackoverflow.com/questions/64894/…
hafichuk

Jawaban:

381

Untuk mendapatkan nama semua tabel gunakan:

SELECT table_name FROM information_schema.tables;

Untuk mendapatkan nama tabel dari penggunaan basis data tertentu:

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

Sekarang, untuk menjawab pertanyaan awal, gunakan kueri ini:

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

Untuk perincian lebih lanjut, lihat: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

Murilo Garcia
sumber
144

Mencoba:

select * from information_schema.tables

Lihat: http://dev.mysql.com/doc/refman/5.0/id/information-schema.html

Nthalk
sumber
4
Ini menunjuk ke arah yang benar, tetapi tidak benar-benar menjawab pertanyaan. Bisa lebih rumit.
Murilo Garcia
@MuriloGarcia information_schema adalah bagian dari standar SQL. Postgres juga memilikinya. Untuk SQLite, Anda melihatsqlite_master
peterchaula
Mengambil tabel dengan nama menggunakan LIKE: SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE '% kata kunci%';
Jarrett Barnett
19

jika kita memiliki banyak basis data dan kita perlu memilih semua tabel untuk basis data tertentu yang dapat kita gunakan TABLE_SCHEMAuntuk mendefinisikan nama basis data sebagai:

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

Abs
sumber
12

Selain menggunakan tabel INFORMATION_SCHEMA, untuk menggunakan SHOW TABLES untuk memasukkan ke dalam tabel Anda akan menggunakan yang berikut ini

<?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);
 }
?>
James Williams
sumber
8

Lihatlah tabel TABLESdalam database information_schema. Ini berisi informasi tentang tabel di database Anda yang lain. Tetapi jika Anda menggunakan hosting bersama, Anda mungkin tidak memiliki akses ke sana.

GolezTrol
sumber
5
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'
Steven Soroka
sumber
3
Bolehkah saya meminta Anda untuk menambahkan beberapa konteks di sekitar jawaban Anda. Jawaban khusus kode sulit dipahami. Ini akan membantu penanya dan pembaca di masa mendatang jika Anda dapat menambahkan lebih banyak informasi dalam posting Anda.
RBT
4

INFORMATION_SCHEMA.TABLESTabel MySQL berisi data tentang kedua tabel (bukan yang sementara tetapi permanen) dan tampilan. Kolom TABLE_TYPEmenentukan apakah ini catatan untuk tabel atau tampilan (untuk tabel TABLE_TYPE='BASE TABLE'dan tampilan TABLE_TYPE='VIEW'). Jadi jika Anda ingin melihat dari tabel skema (basis data) Anda hanya ada permintaan berikut:

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

Saya pikir mungkin membantu untuk menunjukkan bahwa jika Anda ingin memilih tabel yang mengandung kata-kata spesifik Anda dapat dengan mudah melakukannya menggunakan SELECT(bukan SHOW). Kueri di bawah ini dengan mudah mempersempit pencarian ke tabel yang berisi "kata kunci"

SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"
Robert Sinclair
sumber
0

Masih ada cara lain yang lebih sederhana untuk mendapatkan nama tabel

SHOW TABLES FROM <database_name>
Smith
sumber
2
Ini sama sekali tidak menjawab pertanyaan.
Mike Chamberlain
Membantu saya ketika saya mencari sesuatu yang sesuai dengan judul pertanyaan.
Shihe Zhang
Tidak. Ini tidak baik karena hanya menampilkan tabel di alat mysql.
TS
0

Kueri di bawah ini berfungsi untuk saya. Ini dapat menampilkan database, tabel, nama kolom, tipe data, dan jumlah kolom.

**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;**
Sidhajyoti
sumber
-3

Untuk menyisipkan, memperbarui, dan menghapus, lakukan hal berikut:

$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;
Eduardo Krp
sumber
Kami berharap bahasa Inggris di sini. Namun kami memiliki situs dalam bahasa Portugis di: pt.stackoverflow.com
Laurel