web-dev-qa-db-fra.com

Obtenir les noms de table en utilisant l'instruction SELECT dans MySQL

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

Est-il possible d'obtenir les noms de table à l'aide d'une instruction SELECT standard, comme par exemple:

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

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 initiale, 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

270
Murilo Garcia

Essayer:

select * from information_schema.tables

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

140
Nthalk

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

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

17
Abs

Outre l’utilisation de la table INFORMATION_SCHEMA, pour utiliser SHOW TABLES et pour insérer dans une table,

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

Jetez un coup d'œil à la table TABLES dans 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 partagé, vous n'y avez probablement pas accès.

8
GolezTrol

Je pense que vous pouvez obtenir les données souhaitées à partir de INFORMATION_SCHEMA TABLES.

Vous pouvez trouver plus d'infos ici: http://dev.mysql.com/doc/refman/5.0/fr/tables-table.html

6
Andrey
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'
3
Steven Soroka

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

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

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 la variable SELECT (au lieu de SHOW). La requête ci-dessous réduit facilement la recherche aux tables contenant "mot clé"

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

Il y a encore un autre moyen plus simple d'obtenir des noms de table

SHOW TABLES FROM <database_name>
0
Smith