Obtenir des noms de table à l'aide de l'instruction SELECT dans MySQL

260

Dans MySQL, je sais que je peux lister les tables dans une base de données avec:

SHOW TABLES

Cependant, je veux insérer ces noms de table dans une autre table, par exemple:

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

Existe-t-il un moyen d'obtenir les noms de table à l'aide d'une instruction SELECT standard, quelque chose comme:

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */
Mike Chamberlain
la source
doublon possible de stackoverflow.com/questions/64894/…
hafichuk

Réponses:

381

Pour obtenir le nom de toutes les tables, utilisez:

SELECT table_name FROM information_schema.tables;

Pour obtenir le nom des tables d'une base de données spécifique, utilisez:

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

Maintenant, pour répondre à la question d'origine, utilisez cette requête:

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

Pour plus de détails, voir: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

Murilo Garcia
la source
144

Essayer:

select * from information_schema.tables

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

Nthalk
la source
4
Cela va dans la bonne direction, mais ne répond pas vraiment à la question. Pourrait élaborer davantage.
Murilo Garcia
@MuriloGarcia information_schema fait partie de la norme SQL. Postgres l'a aussi. Pour SQLite, vous regardezsqlite_master
peterchaula
Récupération des tables par nom à l'aide de LIKE: SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE '% keyword%';
Jarrett Barnett
19

si nous avons plusieurs bases de données et que nous devons sélectionner toutes les tables pour une base de données particulière, nous pouvons utiliser TABLE_SCHEMApour définir le nom de la base de données comme:

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

Abdos
la source
12

En plus d'utiliser la table INFORMATION_SCHEMA, pour utiliser SHOW TABLES pour insérer dans une table, vous utiliseriez les éléments suivants

<?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
la source
8

Jetez un œil au tableau TABLESde la base de données information_schema. Il contient des informations sur les tables de vos autres bases de données. Mais si vous êtes sur l'hébergement mutualisé, vous n'y avez probablement pas accès.

GolezTrol
la source
5
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'
Steven Soroka
la source
3
Puis-je vous demander de bien vouloir ajouter un peu plus de contexte à votre réponse. Les réponses uniquement codées sont difficiles à comprendre. Cela aidera le demandeur et les futurs lecteurs à la fois si vous pouvez ajouter plus d'informations dans votre message.
RBT
4

La INFORMATION_SCHEMA.TABLEStable MySQL contient des données sur les tables (pas temporaires mais permanentes) et les vues. La colonne TABLE_TYPEdéfinit s'il s'agit d'un enregistrement pour la table ou la vue (pour les tables TABLE_TYPE='BASE TABLE'et pour les vues TABLE_TYPE='VIEW'). Donc, si vous voulez voir uniquement à partir de vos tables de schéma (base de données), il y a la requête suivante:

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

Je pense qu'il peut être utile de souligner que si vous souhaitez sélectionner des tableaux contenant des mots spécifiques, vous pouvez facilement le faire en utilisant le SELECT(au lieu de SHOW). La requête ci-dessous restreint facilement la recherche aux tableaux contenant "mot-clé"

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

Il existe encore un autre moyen plus simple d'obtenir les noms de table

SHOW TABLES FROM <database_name>
Forgeron
la source
2
Cela ne répond pas du tout à la question.
Mike Chamberlain
M'a aidé lorsque je cherchais quelque chose qui correspondait au titre de la question.
Shihe Zhang
Non, ce n'est pas bon car il ne montre que les tableaux dans les outils mysql.
TS
0

Cette requête ci-dessous a fonctionné pour moi. Cela peut capable d'afficher les bases de données, les tables, les noms de colonnes, les types de données et le nombre de colonnes.

**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
la source
-3

Pour insérer, mettre à jour et supprimer, procédez comme suit:

$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
la source
Nous attendons l'anglais ici. Nous avons cependant un site en portugais sur: pt.stackoverflow.com
Laurel