Использование команды SELECT для работы с INFORMATION_SCHEMA

Пример использования команды SELECT для работы с INFORMATION_SCHEMA.

Как было сказано ранее, информацию из базы данных INFORMATION_SCHEMA можно получить с помощью команды SELECT, обращаясь напрямую к ее таблицам. Это значит, что применимы любые полезные особенности этой команды.

Т.е. в команде SELECT могут быть указаны или использованы:

  • конкретные имена таблиц и их столбцов, из которых необходимо получить данные;
  • условие WHERE для получения информации с указанием необходимых условий выбора;
  • группировку и сортировку результатов выбора с помощью опций GROUP BY и ORDER BY;
  • объединение результатов с помощью JOIN и UNION;
  • подзапросы (subqueries).

Результаты, полученные из INFORMATION_SCHEMA с помощью команды SELECT, могут быть записаны в другую таблицу с помощью команд CREATE TABLE … SELECT или INSERT … SELECT. В каких случаях это может быть полезно, рассмотрим позднее.

Примеры использования:

1. Показать имена таблиц и используемый для них storage engines в конкретной базе данных:

select table_name, engine from information_schema.tables where table_schema=’test_db’;

2. Найти все таблицы, которые имеют столбец типа “SET”:

select table_schema, table_name, column_name from information_schema.columns where data_type = ‘set’;

3. Показать сортировку по умолчанию для каждой кодировки:

select character_set_name,collation_name from information_schema.collations where is_default=’Yes’;

4. Показать количество таблиц в каждой базе данных:

select table_schema, count(*) from information_schema.tables group by table_schema;

 
Таблицы в базе данных INFORMATION_SCHEMA read only (только для чтения). Они не могут быть модифицированы командами INSERT, DELETE, UPDATE. Если мы попытаемся, к примеру, удалить что-то из какой-то таблицы, сервер вернет ошибку:

mysql> delete from information_schema.tables;
ERROR 1044 (42000): Access denied for user ‘root’@’localhost’ to database ‘information_schema’

Leave a Reply

Your email address will not be published. Required fields are marked *