MySQL / 9. Получение и использование метаданных

Вывод списков таблиц и баз данных

Задача
Вы хотите получить список таблиц базы данных или баз данных, работающих на сервере MySQL.

Решение
Используйте запрос SHOW TABLES или SHOW DATABASES.

Обсуждение
Чтобы получить список таблиц текущей базы данных, используйте запрос:

SHOW TABLES;

Однако если никакая база данных не была выбрана, запрос не выполнится. Чтобы избежать подобной проблемы, убедитесь в том, что имеется текущая база данных, или укажите имя базы данных явно:

SHOW TABLES FROM имя_БД;

Другая форма SHOW возвращает список баз данных, работающих на сервере: SHOW DATABASES;

Если вам нужен не зависящий от базы данных способ получения списка таблиц или баз данных, и вы работаете с Perl или Java, попробуйте следующие приемы.

Что касается Perl, то DBI предоставляет функцию tables(), которая возвращает список таблиц. Она работает только для текущей базы данных:

my @tables = $dbh->tables ();

В Java можно использовать методы JDBC, предназначенные для получения списков таблиц или баз данных. Для каждого метода вызовите метод getMetaData() вашего объекта соединения и используйте полученный объект DatabaseMetaData для извлечения необходимой информации. Вот как выводится список таблиц указанной базы данных:

// вывод списка таблиц базы данных, имя которой указано в dbName;
// если dbName – пустая строка, используется текущая база данных
DatabaseMetaData md = conn.getMetaData ();
ResultSet rs = md.getTables (dbName, "", "%", null);
while (rs.next ())
System.out.println (rs.getString (3)); // столбец 3 = имя таблицы
rs.close ();

Аналогичная процедура выводит список баз данных:

// вывод списка баз данных
DatabaseMetaData md = conn.getMetaData ();
ResultSet rs = md.getCatalogs ();while (rs.next ())
System.out.println (rs.getString (1)); // столбец 1 = имя базы данных
rs.close ();

Статьи по MySQL на эту тему:

Мониторинг сервера MySQL
Определение текущего пользователя MySQL
Определение текущей базы данных
Определение типов таблиц, поддерживаемых сервером
Проверка существования базы данных