Сторінка 2 з 4
створення уявлень
Для створення уявлення використовується оператор CREATE VIEW, що має такий синтаксис:
CREATE [OR REPLACE]
[ALGORITHM =]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED / LOCAL] CHECK OPTION]
view_name - ім'я створюваного подання. select_statement - оператор SELECT, що вибирає дані з таблиць і / або інших уявлень, які будуть міститися в поданні
Оператор CREATE VIEW містить 4 необов'язкові конструкції:
- OR REPLACE - при використанні даної конструкції в разі існування уявлення з таким ім'ям старе буде видалено, а нове створено. В іншому випадку виникне помилка, що інформує про сществованіі уявлення з таким ім'ям і нове уявлення створено не буде. Слід зазначити одну особливість - імена таблиць і уявлень в рамках однієї бази даних повинні бути унікальні, тобто не можна створити уявлення з ім'ям вже існуючої таблиці. Однак конструкція OR REPLACE діє тільки на уявлення і заміщати таблицю не буде.
- ALGORITM - визначає алгоритм, який використовується при зверненні до подання (докладніше мова про це піде нижче).
- column_list - задає імена полів уявлення.
- WITH CHECK OPTION - при використанні даної конструкції все додаються чи редагуються рядки будуть перевірятися на відповідність визначенню уявлення. У разі невідповідності дана зміна не буде виконано. Зверніть увагу, що при вказівці даної конструкції для неоновлювані уявлення виникне помилка і подання не буде створено. (Докладніше мова про це піде нижче).
За замовчуванням колонки уявлення мають ті ж імена, що і поля, що родить! Оператором SELECT у визначенні подання. При явній вказівці імен полів уявлення column_list повинен включати по одному імені для кожного поля розділених комою. Існує дві причини, через які бажано використовувати явне вказівку імен полів уявлення:
- Імена полів уявлення повинні бути унікальні в межах даного подання. При створенні вистави заснованого на декількох таблицях можлива ситуація повторення імен полів уявлення. Наприклад: CREATE VIEW v AS SELECT a.id, b.id FROM a, b; Для уникнення такої ситуації потрібно явно вказувати імена полів уявлення
CREATE VIEW v (a_id, b_id) AS SELECT a.id, b.id FROM a, b; Того ж результату можна домогтися, використовуючи синоніми (аліаси) для назв колонок:
CREATE VIEW v AS SELECT a.id a_id, b.id b_id FROM a, b; - У разі якщо у визначенні подання одержувані дані перетворюються з допомогою якихось функцій, то ім'ям поля буде цей вислів, що не дуже зручно для подальших посилань на це поле. напімер:
CREATE VIEW v AS SELECT group_concat (DISTINCT column_name oreder BY column_name separator `+`) FROM table_name; Навряд чи зручно використовувати в подальшому в якості імені поля `group_concat (DISTINCT username ORDER BY username separator` + `)`
- Якщо в обох операторах зустрічається умова WHERE, то обидві ці умови будуть виконані як якби вони були об'єднані оператором AND.
- Якщо у визначенні подання є конструкція ORDER BY, то вона буде працювати тільки в разі відсутності в зовнішньому операторі SELECT, звертається до подання, власного умови сортування. При наявності конструкції ORDER BY в зовнішньому операторі сортування, наявна у визначенні подання, буде проігнорована.
- При наявності в обох операторах модифікаторів, що впливають на механізм блокування, таких як HIGH_PRIORITY, результат їх спільної дії невизначений. Для уникнення невизначеності рекомендується у визначенні уявлення не використовувати подібні модифікатори.