Skip to main content

Представления и метаданные

Представления

Создание представления 

CREATE VIEW customer_vw (customer_id, first_name, last_name, email) AS SELECT ...
CREATE VIEW film_stats AS
SELECT f.filmed, f.title, f.description, f.rating, (SELECT c.name FROM category c INNER JOIN film_category fc ON c.category_id = fc.category_id WHERE fc.film_id = f.film_id) category_name,
(SELECT count(*) FROM film_actor fa WHERE fa.film_id = f.film_id) num_actors, (SELECT count(*) FROM inventory i WHERE i.film_id = f.film_id) inventory_cnt, 
(SELECT count(*) FROM inventory i INNER JOIN rental r ON i.inventory_id = r.inventory_id WHERE i.film_id = f.film_id) num_rentals
FROM film f;

Используются для:

  • Безопасность данных
  • Агрегация данных
  • Сокрытие сложности
  • Соединение разделенных данных (одна таблица -> две текущая и архив, но редко нужно как одна) объединяются через union all

Представление обновляемое, если:

  • не используются агрегатные функции
  • нет group by и having.
  • В предложениях select и from нет подзапросов, а любой подзапрос в предложении where не ссылается на таблицы в предложении from.
  • нет union,union all или distinct.
  • Предложение from содержит как минимум одну таблицу или обновляемое представление.
  • Если имеется более одной таблицы или представления, предложение from использует только внутренние соединения.

В представлении с одной таблицей (простое представление) не может быть использовано для вставки данных.
В представлении с внутренними join:  CREATE VIEW customer details AS SELECT c.customer_id,
    - можно обновлять столбцы одной из таблиц
    - можно добавлять данные 

Метаданные

information_schema - данные о данных

.schemata базы данных
.tables информация обо всех таблицах
.views о представлениях
.columns о столбцах
.statistics об индексах
.table_constraints об ограничениях
.user_privilege Кто имеет привилегии для различных объектов схемы
.schema_privileges Кто имеет привилегии для различных баз данных
.table_privileges Кто имеет привилегии для различных таблиц
.column_privileges Кто имеет привилегии для различных столбцов таблиц
.routines Сохраненные подпрограммы (процедуры и функции)
.triggers Триггеры таблиц
.plugins Подключаемые модули сервера
.engines Доступные механизмы хранения
.partitions Разбиения таблиц
.events Запланированные события
.processlist Выполняющиеся процессы
.referential_constraints Внешние ключи
.parameters Параметры хранимых процедур и функций
.profiling Информация о профилях пользователей
SET @qry = 'SELECT customer_id, first_name, last_name FROM customer WHERE customer_id = ?';
PREPARE dynsql2 FROM @qry;
SET @custid = 9;
EXECUTE dynsql2 USING @custid;
DEALLOCATE PREPARE dynsql2;