Рекомендуемое избранное — подробное введение в представления MySQL

база данных

Предисловие: 

В MySQL представления, вероятно, являются одним из наиболее часто используемых объектов базы данных. Итак, вы знаете разницу между представлениями и таблицами? Знаете ли вы, на что следует обращать внимание при создании и использовании представлений? Многие люди могут знать о представлениях лишь немного. Студенты, которые хотят узнать больше о представлениях, приходят сюда. В этой статье подробно рассказывается о концепции, создании и использовании представлений.

1. Просмотреть определение и краткое введение

Представление — это визуальная таблица, основанная на наборе результатов оператора SQL, то есть представление — это виртуальная таблица, которая может содержать все или часть записей таблицы или может быть создана из одной или нескольких таблиц. С представлениями вам не нужно видеть все данные в таблице данных, а нужно получать только те данные, которые вам нужны. Когда мы создаем представление, мы фактически выполняем в базе данных оператор SELECT, который содержит имена полей, функции и операторы для отображения данных пользователю. 

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

2. Просмотр создания и использования

Стандартный синтаксис для создания представления:

CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = user]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

Грамматическая интерпретация:

1) ИЛИ ЗАМЕНИТЬ: означает заменить существующее представление, если представление не существует, то СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ВИД — это то же самое, что и СОЗДАТЬ ВИД.

2) Алгоритм: Указывает алгоритм выбора представления, алгоритм по умолчанию не определен (undefined): mysql автоматически выбирает алгоритм, который вы хотите использовать; MERGE merge; Temptable временная таблица, обычно этот параметр явно не указывается.

3) DEFINER: Указывает, кто является создателем или разработчиком представления.Если этот параметр не указан, определяющим является пользователь, создавший представление.

4) БЕЗОПАСНОСТЬ SQL: безопасность SQL, по умолчанию DEFINER.

5) select_statement: указывает оператор выбора, который можно выбрать из базовой таблицы или других представлений.

6) WITH CHECK OPTION: Указывает, что представление гарантирует ограничения при обновлении, по умолчанию используется CASCADED.

На самом деле, когда мы ежедневно создаем представления, нам не нужно указывать каждый параметр, в целом рекомендуется создавать представления так:

create view <视图名称> [(column_list)]
as select语句
with check option;

Вот несколько конкретных примеров создания:

# 单表视图
mysql> create view v_F_players(编号,名字,性别,电话)
    -> as
    -> select PLAYERNO,NAME,SEX,PHONENO from PLAYERS
    -> where SEX='F'
    -> with check option;
Query OK, 0 rows affected (0.00 sec)

mysql> desc v_F_players;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| 编号    | int(11)  | NO   |     | NULL    |       |
| 名字    | char(15) | NO   |     | NULL    |       |
| 性别    | char(1)  | NO   |     | NULL    |       |
| 电话    | char(13) | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> select * from  v_F_players;
+--------+-----------+--------+------------+
| 编号    | 名字      | 性别    | 电话        |
+--------+-----------+--------+------------+
|      8 | Newcastle | F      | 070-458458 |
|     27 | Collins   | F      | 079-234857 |
|     28 | Collins   | F      | 010-659599 |
|    104 | Moorman   | F      | 079-987571 |
|    112 | Bailey    | F      | 010-548745 |
+--------+-----------+--------+------------+
5 rows in set (0.02 sec)

# 多表视图
mysql> create view v_match
    -> as 
    -> select a.PLAYERNO,a.NAME,MATCHNO,WON,LOST,c.TEAMNO,c.DIVISION
    -> from 
    -> PLAYERS a,MATCHES b,TEAMS c
    -> where a.PLAYERNO=b.PLAYERNO and b.TEAMNO=c.TEAMNO;
Query OK, 0 rows affected (0.03 sec)

mysql> select * from v_match;
+----------+-----------+---------+-----+------+--------+----------+
| PLAYERNO | NAME      | MATCHNO | WON | LOST | TEAMNO | DIVISION |
+----------+-----------+---------+-----+------+--------+----------+
|        6 | Parmenter |       1 |   3 |    1 |      1 | first    |
|       44 | Baker     |       4 |   3 |    2 |      1 | first    |
|       83 | Hope      |       5 |   0 |    3 |      1 | first    |
|      112 | Bailey    |      12 |   1 |    3 |      2 | second   |
|        8 | Newcastle |      13 |   0 |    3 |      2 | second   |
+----------+-----------+---------+-----+------+--------+----------+
5 rows in set (0.04 sec)

Представления используются так же, как базовые таблицы, например, мы можем использовать selectиз view_name или выберитеfrom view_name where ... , представление может отфильтровать данные, которые нам не нужны, и заменить соответствующие имена столбцов нашими пользовательскими именами столбцов. Представление действует как интерфейс доступа, независимо от того, насколько сложны структура таблицы и имя таблицы базовой таблицы. Как правило, представление используется только для запросов, а само представление не содержит данных. Поэтому операции dml, выполняемые над представлением, в конечном итоге отражаются в базовой таблице. Когда операции удаления, обновления и вставки выполняются над представлением , исходная таблица также будет обновлена.Исходная таблица выпадающего представления не изменится, представления не могут быть усечены. Но в целом мы хотим избежать обновления представления, а операция dml может напрямую обновлять исходную таблицу.

3. Рекомендации по просмотрам

Ниже кратко представлены преимущества представления, благодаря которым мы можем легко обобщить применимые сценарии представления.

1) Простой: Пользователям, использующим представление, вообще не нужно заботиться о структуре, условиях ассоциации и условиях фильтрации соответствующих таблиц, для пользователей это уже результирующий набор отфильтрованных составных условий.

2) Безопасность: пользователи, использующие представления, могут получить доступ только к наборам результатов, которые им разрешено запрашивать.Управление разрешениями таблиц не может быть ограничено определенной строкой или столбцом, но это может быть легко достигнуто с помощью представлений.

3) Независимость данных: После определения структуры представления она может блокировать воздействие изменений структуры таблицы к пользователю. Исходная таблица не влияет на вид; исходная таблица модифицирует имя столбца и может быть решена изменяя вид. Влияние людей.

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

В процессе ежедневного использования и обслуживания представления я обобщил следующие практики для справки:

  • Для именования представлений рекомендуется использовать единый префикс, например v.или просмотретьначать для легкой идентификации.
  • SQL SECURITY использует DEFINER по умолчанию, что означает, что определитель представления имеет полномочия запрашивать представление.
  • Просмотр определения предложил использование соответствующих пользователей программы.
  • Представления не должны быть связаны со слишком большим количеством таблиц, что приводит к избыточности данных.
  • При запросе представления нужно прикреплять условия, не рекомендуется каждый раз запрашивать все данные.
  • Миграция представлений должна учитывать определяющего пользователя представления в новой среде.
  • Не обновляйте данные в представлении напрямую, представление предназначено только для запроса.

Суммировать: 

Представления часто используются в MySQL. Эта статья вводит концепцию и создание метода взглядов и расширяет их. Позже он описывает сценарии использования и преимущества взглядов. Вы не можете чувствовать разницу между видом и столом, когда вы его используете. На самом деле, есть еще много дверных проемов. Рекомендуется, чтобы представление использовалось только для запроса. Согласно спецификации, представление принесет большое удобство. Надеюсь, что эта статья полезна для вас.

gongzhonghao