Учебники

25) Просмотров

Какие мнения?

VIEWS — это виртуальные таблицы, которые не хранят никаких собственных данных, но отображают данные, хранящиеся в других таблицах. Другими словами, VIEWS — это не что иное, как SQL-запросы. Представление может содержать все или несколько строк таблицы. Представление MySQL может отображать данные из одной или нескольких таблиц.

Синтаксис просмотров

Давайте теперь посмотрим на основной синтаксис, используемый для создания представления в MySQL.

CREATE VIEW `view_name` AS SELECT statement;

ГДЕ

  • «CREATE VIEW` view_name` » говорит серверу MySQL создать объект представления в базе данных с именем` view_name`
  • «Оператор AS SELECT» — это операторы SQL, которые должны быть упакованы в представления. Это может быть оператор SELECT, который может содержать данные из одной или нескольких таблиц.

Давайте теперь создадим наше первое представление, используя «myflixdb», мы создадим простое представление, которое ограничивает столбцы, видимые в таблице members.

Предположим, что в требованиях авторизации указано, что бухгалтерия может видеть только номер участника, его имя и пол из таблицы участника. Для этого вы можете создать ВИД —

CREATE VIEW `accounts_v_members` AS SELECT `membership_number`,`full_names`,`gender` FROM `members`;

Выполнение вышеупомянутого сценария в MySQL Workbench для myflixdb и расширение узла представлений в проводнике баз данных дает нам следующие результаты.

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

Обратите внимание, что объект account_v_members теперь виден в объектах представлений базы данных. Давайте теперь выполним инструкцию SELECT, которая выбирает все поля из представления.

SELECT * FROM `accounts_v_members`;

Выполнение вышеуказанного скрипта в MySQL Workbench против myflixdb дает нам следующие результаты, показанные ниже.

membership_numberfull_namesgender
1Janet JonesFemale
2Janet Smith JonesFemale
3Robert PhilMale
4Gloria WilliamsFemale
5Leonard HofstadterMale
6Sheldon CooperMale
7Rajesh KoothrappaliMale
8Leslie WinkleMale
9Howard WolowitzMale

Только авторизованные столбцы для бухгалтерии были возвращены. Другие детали, найденные в таблице участников, были скрыты.

Если мы хотим увидеть операторы SQL, которые составляют конкретное представление, мы можем использовать скрипт, показанный ниже, чтобы сделать это.

SHOW CREATE VIEW `accounts_v_members`;

Выполнение приведенного выше сценария дает вам имя представления и операторы SQL SELECT, используемые для создания представления.

Соединения и просмотры

Давайте теперь рассмотрим довольно сложный пример, который включает несколько таблиц и использует соединения.

Мы упакуем созданное JOIN, которое получает информацию из трех (3) таблиц, а именно: участники, фильмы и прокат фильмов. Ниже приведен сценарий, который помогает нам достичь этого.

CREATE VIEW `general_v_movie_rentals` AS SELECT mb.`membership_number`,mb.`full_names`,mo.`title`,mr.`transaction_date`,mr.`return_date` FROM `movierentals` AS mr INNER JOIN `members` AS mb ON mr.`membership_number` = mb.`membership_number` INNER JOIN `movies` AS mo ON mr.`movie_id` = mo.`movie_id`;

Выполнение вышеуказанных сценариев создает представление с именем general_v_movie_rentals в нашей myflixdb

Теперь давайте выберем все поля из таблицы с именем general_v_movie_rentals.

SELECT * FROM `general_v_movie_rentals`;

Выполнение вышеупомянутого сценария в MySQL Workbench против myflixdb дает нам следующие результаты, показанные ниже.

membership_numberfull_namestitletransaction_datereturn_date
1Janet JonesPirates of the Caribean 420-06-201228-06-2012
1Janet JonesForgetting Sarah Marshal22-06-201225-06-2012
3Robert PhilForgetting Sarah Marshal22-06-201225-06-2012
2Janet Smith JonesForgetting Sarah Marshal21-06-201224-06-2012
3Robert PhilX-Men23-06-201228-06-2012

Обратите внимание, что нам не нужно было писать сложный запрос JOIN, чтобы получить информацию об участниках, фильмах и деталях проката фильмов. Мы просто использовали представление в обычном операторе SELECT, как любая другая обычная таблица. Представление может быть вызвано из любого места в прикладной системе, запущенной поверх myflixdb.

Отбрасывание просмотров

Команда DROP может использоваться для удаления представления из базы данных, которое больше не требуется. Основной синтаксис для отбрасывания представления заключается в следующем.

DROP VIEW ` general_v_movie_rentals `;

Зачем использовать представления?

Вы можете хотеть использовать представления прежде всего по следующим 3 причинам

  • В конечном итоге вы будете использовать свои знания SQL для создания приложений, которые будут использовать базу данных для требований к данным. Рекомендуется использовать в своем приложении VIEWS исходной структуры таблиц вместо использования самих таблиц. Это гарантирует, что при рефакторинге вашей БД ваш унаследованный код увидит оригинальную схему через представление, не нарушая приложения.
  • ВИДЫ увеличивают возможность повторного использования. Вам не нужно будет создавать сложные запросы, включающие соединения повторно. Вся сложность преобразуется в одну строку запроса с использованием VIEWS. Такой сокращенный код будет легче интегрировать в ваше приложение. Это исключит вероятность опечаток, и ваш код станет более читабельным.
  • ВИДЫ помогают в защите данных. Вы можете использовать представления, чтобы показывать пользователям только авторизованную информацию и скрывать конфиденциальные данные, такие как номера кредитных карт.

Резюме

  • Представления — это виртуальные таблицы; они не содержат данных, которые возвращаются. Данные хранятся в таблицах, на которые ссылается инструкция SELECT.
  • Представления улучшают безопасность базы данных, показывая только предполагаемые данные авторизованным пользователям. Они скрывают конфиденциальные данные.
  • Представления облегчают жизнь, поскольку вам не приходится писать сложные запросы снова и снова.
  • Можно использовать INSERT, UPDATE и DELETE для VIEW. Эти операции изменят базовые таблицы VIEW. Единственное соображение состоит в том, что VIEW должен содержать все столбцы NOT NULL таблиц, на которые он ссылается. В идеале, вы не должны использовать VIEWS для обновления.