Читаем MySQL: руководство профессионала полностью

Причина выбирать TEMPTABLE явно: блокировки на основных таблицах могут быть сняты после того, как временная таблица была создана, но прежде, чем это используется, чтобы закончить обрабатывать инструкцию. Это могло бы привести к более быстрому снятию блокировки, чем алгоритм MERGE так, чтобы другая клиентура, которая использует view, не была блокирована очень долго.

Алгоритм view может быть UNDEFINED по трем причинам:

Никакое предложение ALGORITHM не присутствует в инструкции CREATE VIEW.

Инструкция CREATE VIEW имеет явное предложение ALGORITHM = UNDEFINED.

ALGORITHM = MERGE определен для view, который может быть обработан только с временной таблицей. В этом случае MySQL генерирует предупреждение и устанавливает алгоритм к UNDEFINED (не к TEMPTABLE!).

Как упомянуто ранее, MERGE обработан, объединяя соответствующие части определения view в инструкцию, которая обращается к view. Следующие примеры кратко иллюстрируют, как работает алгоритм MERGE. Примеры принимают, что имеется view v_merge, который имеет это определение:

CREATE ALGORITHM = MERGE VIEW v_merge (vc1, vc2) AS

SELECT c1, c2 FROM t WHERE c3 > 100;

Пример 1: Предположим, что мы выдаем эту инструкцию:

SELECT * FROM v_merge;

MySQL обрабатывает инструкцию следующим образом:

v_merge становится t.

* становится vc1, vc2, которые соответствуют c1, c2.

Предложение WHERE из view добавляется.

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

SELECT c1, c2 FROM t WHERE c3 > 100;

Пример 2: Предположим, что мы выдаем эту инструкцию:

SELECT * FROM v_merge WHERE vc1 < 100;

Эта инструкция обработана аналогично предыдущей за исключением того, что vc1 < 100 становится c1 <100 и предложение WHERE из view добавлено к предложению WHERE инструкции, используя связку AND (круглые скобки добавлены, чтобы удостовериться, что части предложения выполнены с правильным старшинством). Возникающая в результате инструкция, которая будет выполнена:

SELECT c1, c2 FROM t WHERE (c3 > 100) AND (c1 < 100);

Действительно, инструкция, которая будет выполнена, имеет предложение WHERE этой формы:

WHERE (select WHERE) AND (view WHERE)

Алгоритм MERGE требует взаимно однозначной связи между строками в view и строках в основной таблице. Если эта связь не действует, временная таблица должна использоваться вместо этого. Недостаток взаимно однозначной связи происходит, если view содержит любую из этих конструкций:

Агрегатные функции (SUM(), MIN(), MAX(), COUNT() и им подобные)

DISTINCT

GROUP BY

HAVING

UNION или UNION ALL

Обращается только к литеральным значениям (в этом случае не имеется никакой основной таблицы).

Некоторые views обновляемые. То есть Вы можете использовать их в инструкциях типа UPDATE, DELETE или INSERT, чтобы модифицировать содержание основной таблицы. Чтобы view был обновляемым, должна иметься взаимно однозначная связь между строками в view и строками в основной таблице. Имеются также некоторые другие конструкции, которые делают view не обновляемым. А именно: view не обновляемый, если он содержит любое из следующего:

Агрегатные функции (SUM(), MIN(), MAX(), COUNT() и им подобные)

DISTINCT

GROUP BY

HAVING

UNION или UNION ALL

Подзапросы в списке select

Join

Необновляемые view в FROM

Подзапросы в WHERE, ссылающиеся на таблицы в FROM

Обращается только к литеральным значениям (в этом случае не имеется никакой основной таблицы, чтобы модифицировать)

ALGORITHM = TEMPTABLE (использование временной таблицы всегда делает view не обновляемым)

Относительно вставляемости (обновляемости с инструкциями INSERT): обновляемый view является вставляемым, если он удовлетворяет этим дополнительным требованиям для столбцов view:

Не должно иметься никаких двойных имен столбца view.

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

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

col1 + 3

UPPER(col2)

col3 / col4

(подзапрос)

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

CREATE VIEW v AS SELECT col1, 1 AS col2 FROM t;

Этот view не вставляемый, потому что col2 получен из выражения. Но это обновляемый view, если модификация не пробует менять col2. Эта модификация допустима:

UPDATE v SET col1 = 0;

А вот эта модификация уже не допустима, потому что она пытается модифицировать полученный столбец:

UPDATE v SET col2 = 0;

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных