Ottieni nomi di tabelle usando l'istruzione SELECT in MySQL


260

In MySQL, so di poter elencare le tabelle in un database con:

SHOW TABLES

Tuttavia, voglio inserire questi nomi di tabella in un'altra tabella, ad esempio:

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

C'è un modo per ottenere i nomi delle tabelle usando un'istruzione SELECT standard, qualcosa del tipo:

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

Risposte:


381

Per ottenere il nome di tutte le tabelle utilizzare:

SELECT table_name FROM information_schema.tables;

Per ottenere il nome delle tabelle da un database specifico utilizzare:

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

Ora, per rispondere alla domanda originale, utilizzare questa query:

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

Per maggiori dettagli, consultare: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html


144

Provare:

select * from information_schema.tables

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


4
Questo punta nella giusta direzione, ma in realtà non risponde alla domanda. Potrebbe elaborare di più.
Murilo Garcia,

@MuriloGarcia information_schema fa parte dello standard SQL. Anche Postgres ce l'ha. Per SQLite, guardi dentrosqlite_master
peterchaula

Recupero delle tabelle per nome usando LIKE: SELEZIONA TABLE_NAME FROM information_schema.tables DOVE TABLE_NAME COME '% keyword%';
Jarrett Barnett,

19

se disponiamo di più database e dobbiamo selezionare tutte le tabelle per un determinato database, possiamo usare TABLE_SCHEMAper definire il nome del database come:

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


12

Oltre a utilizzare la tabella INFORMATION_SCHEMA, per utilizzare SHOW TABLES per inserire in una tabella è necessario utilizzare quanto segue

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

Dai un'occhiata alla tabella TABLESnel database information_schema. Contiene informazioni sulle tabelle negli altri database. Ma se usi l'hosting condiviso, probabilmente non hai accesso ad esso.



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

3
Posso chiederti di aggiungere un altro contesto alla tua risposta. Le risposte di solo codice sono difficili da capire. Aiuterà il richiedente e i futuri lettori sia se è possibile aggiungere ulteriori informazioni nel tuo post.
RBT

4

La INFORMATION_SCHEMA.TABLEStabella MySQL contiene dati su entrambe le tabelle (non temporanee ma permanenti) e le viste. La colonna TABLE_TYPEdefinisce se si tratta di record per tabella o vista (per tabelle TABLE_TYPE='BASE TABLE'e viste TABLE_TYPE='VIEW'). Quindi, se vuoi vedere solo dalle tue tabelle dello schema (database) c'è la seguente query:

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

2

Penso che possa essere utile sottolineare che se vuoi selezionare tabelle che contengono parole specifiche puoi farlo facilmente usando SELECT(invece di SHOW). La query sottostante restringe facilmente la ricerca alle tabelle che contengono "parola chiave"

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

0

C'è ancora un altro modo più semplice per ottenere i nomi delle tabelle

SHOW TABLES FROM <database_name>

2
Questo non risponde affatto alla domanda.
Mike Chamberlain,

Mi ha aiutato quando cercavo qualcosa che colpisse il titolo della domanda.
Shihe Zhang

No. Non va bene perché mostra solo le tabelle negli strumenti mysql.
TS

0

Questa query qui sotto ha funzionato per me. Questo può mostrare database, tabelle, nomi di colonne, tipi di dati e numero di colonne.

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

Per inserire, aggiornare ed eliminare, procedi come segue:

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

Ci aspettiamo l'inglese qui. Abbiamo comunque un sito in portoghese all'indirizzo: pt.stackoverflow.com
Laurel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.