# Представления и метаданные **Представления** **Создание представления** ```sql CREATE VIEW customer_vw (customer_id, first_name, last_name, email) AS SELECT ... ``` ```sql 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Информация о профилях пользователей
```sql 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; ```