Уявлення (view) в mysql - все про it і програмуванні

Сторінка 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 необов'язкові конструкції:

  1. OR REPLACE - при використанні даної конструкції в разі існування уявлення з таким ім'ям старе буде видалено, а нове створено. В іншому випадку виникне помилка, що інформує про сществованіі уявлення з таким ім'ям і нове уявлення створено не буде. Слід зазначити одну особливість - імена таблиць і уявлень в рамках однієї бази даних повинні бути унікальні, тобто не можна створити уявлення з ім'ям вже існуючої таблиці. Однак конструкція OR REPLACE діє тільки на уявлення і заміщати таблицю не буде.
  2. ALGORITM - визначає алгоритм, який використовується при зверненні до подання (докладніше мова про це піде нижче).
  3. column_list - задає імена полів уявлення.
  4. WITH CHECK OPTION - при використанні даної конструкції все додаються чи редагуються рядки будуть перевірятися на відповідність визначенню уявлення. У разі невідповідності дана зміна не буде виконано. Зверніть увагу, що при вказівці даної конструкції для неоновлювані уявлення виникне помилка і подання не буде створено. (Докладніше мова про це піде нижче).

За замовчуванням колонки уявлення мають ті ж імена, що і поля, що родить! Оператором SELECT у визначенні подання. При явній вказівці імен полів уявлення column_list повинен включати по одному імені для кожного поля розділених комою. Існує дві причини, через які бажано використовувати явне вказівку імен полів уявлення:

  1. Імена полів уявлення повинні бути унікальні в межах даного подання. При створенні вистави заснованого на декількох таблицях можлива ситуація повторення імен полів уявлення. Наприклад: 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;
  2. У разі якщо у визначенні подання одержувані дані перетворюються з допомогою якихось функцій, то ім'ям поля буде цей вислів, що не дуже зручно для подальших посилань на це поле. напімер:
    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` + `)`
  1. Якщо в обох операторах зустрічається умова WHERE, то обидві ці умови будуть виконані як якби вони були об'єднані оператором AND.
  2. Якщо у визначенні подання є конструкція ORDER BY, то вона буде працювати тільки в разі відсутності в зовнішньому операторі SELECT, звертається до подання, власного умови сортування. При наявності конструкції ORDER BY в зовнішньому операторі сортування, наявна у визначенні подання, буде проігнорована.
  3. При наявності в обох операторах модифікаторів, що впливають на механізм блокування, таких як HIGH_PRIORITY, результат їх спільної дії невизначений. Для уникнення невизначеності рекомендується у визначенні уявлення не використовувати подібні модифікатори.