360 votes

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

Dans MySQL, je sais que je peux lister les tables d'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 des tables à l'aide d'une instruction SELECT standard, par exemple :

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

0 votes

Duplicata possible de stackoverflow.com/questions/64894/

548voto

Murilo Garcia Points 4557

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

153voto

Nthalk Points 1260

Essayez :

select * from information_schema.tables

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

4 votes

Cela va dans le bon sens, mais ne répond pas vraiment à la question. Vous pourriez élaborer davantage.

0 votes

@MuriloGarcia information_schema fait partie de la norme SQL. Postgres en dispose également. Pour SQLite, il faut regarder dans sqlite_master

0 votes

Récupération des tables par nom à l'aide de LIKE : SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE '%keyword%' ;

21voto

Abs Points 4156

Si nous avons plusieurs bases de données et que nous avons besoin de 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 :

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

11voto

James Williams Points 3233

Outre l'utilisation de la table INFORMATION_SCHEMA, pour utiliser SHOW TABLES afin d'insérer dans une table, vous devez utiliser la méthode suivante

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

9voto

Steven Soroka Points 8446
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X