Представления и метаданные
Представления
Создание представления
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;
    
                
No comments to display
No comments to display