====== Создать вьюшку ====== CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }] [SQL SECURITY { DEFINER | INVOKER }] VIEW [IF NOT EXISTS] view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION] **Где ALGORITHM это алгоритм хранения вьюшки.** * Для MERGE текст оператора, который ссылается на представление, и определение представления объединяются таким образом, что части определения представления заменяют соответствующие части оператора. * Для TEMPTABLE результаты представления извлекаются во временную таблицу, которая затем используется для выполнения инструкции. * Для UNDEFINED MySQL выбирает, какой алгоритм использовать. Если возможно, он предпочитает MERGE вместо TEMPTABLE, потому что MERGE обычно более эффективен и потому что представление не может быть обновляемым, если используется временная таблица. * Если предложение ALGORITHM отсутствует, алгоритм по умолчанию определяется значением флага derived_merge системной переменной optimizer_switch. **Где DEFINER определяет кто создал вьюшку** * Где user это имя пользователя * Где CURRENT_USER текущий пользователь * Где role это имя роли * Где CURRENT_ROLE роль текущего пользователя ** Где SQL SECURITY это доступ чтения вьюшки ** * DEFINER читать от definer, позволяет читать вьюшку от имени того кто создал вьюшку, игнорируя права того кто делал SELECT * INVOKER читать от запускающего, позволяет читать вьюшку с правами того пользователя который делает SELECT ** column_list список колонок выводимых из вьюшки**, необходим для лучшей оптимизации ** WITH * CHECK OPTION**, тип данных, так-же требуется для оптимизации. CREATE OR REPLACE ALGORITHM = MERGE DEFINER = CURRENT_USER SQL SECURITY INVOKER VIEW `alchemy_by_days` (`date`,`earth`,`air`,`water`,`fire`,`life`,`shadow`) AS SELECT DATE(FROM_UNIXTIME(ep.`timestamp`)) as `date`, sum(IF(ep.type = "earth", ep.price, 0)) as `earth`, sum(IF(ep.type = "air", ep.price, 0)) as `air`, sum(IF(ep.type = "water", ep.price, 0)) as `water`, sum(IF(ep.type = "fire", ep.price, 0)) as `fire`, sum(IF(ep.type = "life", ep.price, 0)) as `life`, sum(IF(ep.type = "shadow", ep.price, 0)) as `shadow` FROM `etheral-prices` ep GROUP BY ep.`timestamp` ORDER BY ep.`timestamp` DESC;