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

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


144

Mencoba:

select * from information_schema.tables

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


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';


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

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.



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

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'

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%"

0

Masih ada cara lain yang lebih sederhana untuk mendapatkan nama tabel

SHOW TABLES FROM <database_name>

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;**

-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;

Kami berharap bahasa Inggris di sini. Namun kami memiliki situs dalam bahasa Portugis di: pt.stackoverflow.com
Laurel
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.