MySQL'de SELECT deyimini kullanarak tablo adlarını alma


260

MySQL, ben bir veritabanındaki tabloları ile listeleyebilirsiniz biliyorum:

SHOW TABLES

Ancak, bu tablo adlarını örneğin başka bir tabloya eklemek istiyorum:

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

Tablo adlarını aşağıdaki gibi bir standart SELECT deyimi kullanarak almanın bir yolu var mı:

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

Yanıtlar:


381

Tüm tabloların adını almak için şunu kullanın:

SELECT table_name FROM information_schema.tables;

Tabloların adını belirli bir veritabanından almak için şunu kullanın:

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

Şimdi, orijinal soruyu cevaplamak için şu sorguyu kullanın:

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

Daha fazla ayrıntı için bkz. Http://dev.mysql.com/doc/refman/5.0/en/information-schema.html


144

Deneyin:

select * from information_schema.tables

Bkz. Http://dev.mysql.com/doc/refman/5.0/en/information-schema.html


4
Bu doğru yönü gösterir, ancak soruyu gerçekten cevaplamaz. Daha fazla ayrıntı verebilir.
Murilo Garcia

@MuriloGarcia information_schema SQL standardının bir parçasıdır. Postgres'de de var. SQLite için, baksqlite_master
peterchaula

LIKE kullanarak tabloları ada göre getirme: information_schema.tables 'dan SELECT TABLE_NAME SELECT TABLE_NAME'% anahtar kelimesi% '' NEREDE;
Jarrett Barnett

19

birden çok veritabanımız varsa ve TABLE_SCHEMAveritabanı adını şu şekilde tanımlamak için kullanabileceğimiz belirli bir veritabanı için tüm tabloları seçmemiz gerekir :

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


12

BİLGİ_SCHEMA tablosunu kullanmanın yanı sıra, bir tabloya eklemek için SHOW TABLES'i kullanmak için aşağıdakileri kullanırsınız

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

TABLESVeritabanındaki tabloya bir göz atın information_schema. Diğer veritabanlarınızdaki tablolar hakkında bilgi içerir. Ancak paylaşılan barındırma kullanıyorsanız, muhtemelen ona erişiminiz yoktur.



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

3
Cevabınızın etrafına biraz daha bağlam eklemenizi rica edebilir miyim? Yalnızca kod yanıtlarının anlaşılması zordur. Gönderinize daha fazla bilgi ekleyebilmeniz hem askerlere hem de gelecekteki okuyuculara yardımcı olacaktır.
RBT

4

MySQL INFORMATION_SCHEMA.TABLEStablosu hem tablolar (geçici değil kalıcı olanlar) hem de görünümler hakkında veriler içerir. Sütun TABLE_TYPE, bunun tablo veya görünüm (tablolar TABLE_TYPE='BASE TABLE've görünümler için TABLE_TYPE='VIEW') için kayıt olup olmadığını tanımlar . Şema (veritabanı) tablolarınızdan görmek istiyorsanız, yalnızca aşağıdaki sorgu vardır:

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

2

Belirli kelimeler içeren tabloları seçmek istiyorsanız SELECT(yerine SHOW) kullanarak kolayca yapabileceğinizi belirtmek yararlı olabilir . Aşağıdaki sorgu, aramayı "anahtar kelime" içeren tablolara kolayca daraltır

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

0

Tablo adlarını almanın daha basit bir yolu daha var

SHOW TABLES FROM <database_name>

2
Bu soruya hiç cevap vermiyor.
Mike Chamberlain

Sorunun başlığına çarpan bir şey ararken bana yardımcı oldu.
Shihe Zhang

Hayır. Bu sadece mysql araçlarındaki tabloları gösterdiği için iyi değil.
TS

0

Aşağıdaki sorgu benim için çalıştı. Bu veritabanlarını, tabloları, sütun adlarını, veri türlerini ve sütun sayısını gösterebilir.

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

Eklemek, güncellemek ve silmek için aşağıdakileri yapın:

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

Burada İngilizce bekliyoruz. Ancak Portekizce bir sitemiz var: pt.stackoverflow.com
Laurel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.