Представления MySQL (VIEW) — это виртуальные таблицы, которые хранят результат заранее определенного SQL-запроса, а не сами данные. Они упрощают работу со сложными запросами, повышают безопасность, скрывая детали базовой схемы, и обеспечивают обратную совместимость при изменении структуры таблиц, извлекая актуальные данные непосредственно из базовых таблиц при каждом обращении к представлению.
Как работают представления?
Виртуальная таблица:
Представление не содержит данных, оно лишь отображает их.
Результат запроса:
Содержимое представления определяется запросом (оператором SELECT).
Динамическое получение данных:
При обращении к представлению MySQL выполняет сохраненный запрос и возвращает актуальные данные из базовых таблиц в момент обращения.
Хранение определения:
Само представление как объект базы данных хранится в системных таблицах, а не данные.
Основные преимущества использований представлений:
Упрощение сложных запросов:
Инкапсулируйте сложные запросы с несколькими соединениями, группировками и подзапросами в одном представлении, чтобы упростить их использование.
Безопасность данных:
Ограничьте доступ к конфиденциальным данным, создав представление, которое включает только разрешенные столбцы или строки.
Абстракция и обратная совместимость:
Скройте детали базовой схемы таблиц от пользователей и приложений. При изменении структуры таблиц можно обновить представление, сохранив обратную совместимость для существующих приложений.
Структурированный доступ к данным:
Предоставляйте структурированный и унифицированный доступ к данным для различных приложений и пользователей.
Пример использования:
Если у вас есть две таблицы (например, «users» и «posts»), вы можете создать представление view_user_data, которое объединяет данные из этих таблиц, чтобы пользователи могли видеть информацию о пользователях и их постах, не зная деталей структуры базовых таблиц.
Пример 1
Создание представления
CREATE VIEW view_user_data AS
SELECT
u.id,
u.name,
p.title AS post_title
FROM
users u
JOIN
posts p ON u.id = p.user_id;
Обращение к представлению
SELECT * FROM view_user_data WHERE name = 'Али';