Какие виды в MySQL? - PullRequest
       4

Какие виды в MySQL?

12 голосов
/ 27 июля 2010

Что такое представления в MySQL? Какова точка зрения и как часто они используются в реальном мире.

Я прошу объяснения непрофессионала, пожалуйста, приведите пример, если это возможно, чтобы помочь моему пониманию!

Спасибо заранее; -)

Ответы [ 9 ]

11 голосов
/ 27 июля 2010

Обычные представления - это не более чем запрашиваемые запросы.

Пример:

У вас есть две таблицы: заказы и клиенты, заказы имеют поля id, customer_id, performance_date, а клиенты - id, first_name, last_name.

Теперь предположим, что вы хотите показать идентификатор заказа, дату исполнения и имя клиента вместе вместо выдачи этого запроса:

SELECT    o.id as order_id, c.first_name + ' ' + c.last_name as customer_name,
          o.performance_date 
FROM      orders o inner join customers c

вы можете создать этот запрос как представление иНазовите его orders_with_customers, теперь в вашем приложении вы можете выполнить запрос

SELECT   *
FROM     orders_with_customer

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

3 голосов
/ 27 июля 2010
2 голосов
/ 27 июля 2010

Все просто: представления - это виртуальные таблицы.

Представления основаны на SELECT-запросах к «реальным» таблицам, но разница в том, что представления не хранят информацию в отличие от реальных таблиц. Представление ссылается только на таблицы и объединяет их так, как им говорит SELECT. Это значительно упрощает часто используемые запросы.

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

CREATE VIEW SALARIES
AS  
SELECT e.name,
       e.salary,
       d.name
FROM employees AS e, deparments as d
WHERE e.depid = d.depid
ORDER BY e.salary DESC

В этом запросе указывается имя сотрудника, его / ее зарплата и отдел, и они упорядочиваются по зарплате в порядке убывания. После этого вы можете использовать такие запросы, как:

 SELECT * from SALARIES

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

1 голос
/ 27 июля 2010

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

Чтобы создать вид, используйте:

CREATE VIEW first_names AS SELECT first_name FROM people WHERE surname='Smith'

Затем вы можете использовать это представление как обычную таблицу. Хитрость в том, что когда вы обновляете людей таблицы, также будет обновляться представление first_names, потому что оно является просто результатом оператора SELECT.

Этот запрос:

SELECT * FROM first_names

вернет все имена людей по имени Смит в таблице people. Если вы обновите таблицу сотрудников и повторно запустите запрос, вы увидите обновленные результаты.

По сути, вы могли бы заменить представления вложенными инструкциями SELECT. Тем не менее, мнения имеют некоторые преимущества:

  • Более короткие запросы - вложенные операторы SELECT делают запрос длиннее
  • Улучшена читаемость - если представление имеет разумное имя, запрос будет гораздо проще понять
  • Лучшая скорость - оператор SELECT представления хранится в ядре базы данных и подвергается предварительному анализу, поэтому его не нужно передавать с клиента и анализировать снова и снова
  • Кэширование и оптимизации - ядро ​​базы данных может кэшировать представление и выполнять другие оптимизации
1 голос
/ 27 июля 2010

В MySQL представление является сохраненным оператором выбора

Посмотрите на этот ответ: MySQL Views - Когда использовать, а когда нет

0 голосов
/ 27 июля 2010

Эта небольшая статья довольно хорошо объясняет представления в MySQL: Представления и другие в MySQL 5.0

0 голосов
/ 27 июля 2010

Представление - это способ предварительного определения определенных запросов.Он может быть запрошен так же, как таблица, определяется запросом, а не набором данных на диске.Запросы к нему позволяют запрашивать результаты таблицы.

В большинстве случаев запросы к представлению можно рассматривать как эквивалент использования определяющего представления запроса в качестве подзапроса в основном запросе.Представления позволяют делать запросы короче и более модульными (так как общие части определяются отдельно в представлении).Они также предоставляют возможность для оптимизации (хотя не все базы данных делают это; я не уверен, что MySQL предоставляет какие-либо оптимизации для ускорения или ускорения представлений).

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

0 голосов
/ 27 июля 2010

Простыми словами

В SQL представление - это виртуальная таблица, основанная на наборе результатов оператора SQL.

Представление содержит строки и столбцы, какнастоящий стол.Поля в представлении - это поля из одной или нескольких реальных таблиц в базе данных.

Вы можете добавить к представлению функции SQL, операторы WHERE и JOIN и представить данные, как если бы данные приходили из одногоТаблица.

Источник

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

0 голосов
/ 27 июля 2010

Это сокращение от общих фильтров.

Скажем, у вас есть таблица записей с удаленным столбцом. Обычно вы не будете заинтересованы в удаленных записях, и, следовательно, вы можете создать представление под названием Записи, которое отфильтровывает удаленные записи из таблицы AllRecords.

Это очистит ваш код, так как вам не нужно добавлять / добавлять deleted != 1 к каждому утверждению.

SELECT * FROM Records

вернет все не удаленные записи.

...