* Виртуални таблици (view)
Публикувано на 07 април 2009 в раздел Бази от Данни.
Виртуалните таблици са още познати с директния си превод от английски език като “изгледи”. На практика виртуалната таблица е съхранен SQL SELECT оператор, който си има собствено име в базата данни. Използва се когато често използваме едни и същи SELECT заявки.
Виртуалните таблици имат и редица други предимства:
- Различните потребители в системата могат да виждат едни и същи данни по различен начин;
- Удобни са за ограничаване се достъпа на потребителите до базовата таблица и така те могат да достъпват само данните, които извежда виртуалната таблица.
Виртуална таблица се създава чрез операторът CREATE VIEW:
CREATE VIEW <име>(<имена на колони>) AS SELECT <имена на колони> ... ;
Във вложения оператор SELECT не може да се използва ORDER BY и UNION. Важно е да има съответствие между върнатите колони от оператора SELECT и изброените след името на VIEW.
Пример: Създаване на виртуална таблица с данните на служителите на банка Bulbank:
CREATE VIEW bulbank_employees
AS SELECT * FROM employees
WHERE branch_id IN(
SELECT id FROM branches
WHERE bank_code IN(
SELECT code FROM banks
WHERE name = "Bulbank"
)
);
Сега можем да го използваме също както обикновена таблица:
mysql> SELECT * FROM bulbank_employees; +----+-----------------+-----------+ | id | name | branch_id | +----+-----------------+-----------+ | 1 | Ivan Ivanov | 1 | | 3 | Mihail Zahariev | 1 | | 4 | Milen Stoilov | 2 | | 5 | Svilen Petrov | 2 | | 6 | Ilian Stoianov | 2 | | 7 | Petar Petrov | 2 | +----+-----------------+-----------+ 6 rows in set (0.00 sec)
Можем да изпълняваме и заявки от тип INSERT, UPDATE и DELETE – те ще бъдат трансформирани автоматично от системата за управление на бази данни върху базовата таблица.
Ако в операторът SELECT участва агрегатна функция или GROUP BY, то става напълно необновяемо. Изобщо използването на INSERT, UPDATE и DELETE при VIEW не се препоръчва. Най-често VIEW се използва “само за четене” и съответно потребителите се рестриктират да имат само права SELECT върху тези таблици.
За изтриването на VIEW става чрез оператора DROP VIEW:
DROP VIEW bulbank_employees CASCADE;
Ключовата дума CASCADE означава, че ако има производно на това VIEW (т.е. VIEW създадено чрез изтриваното VIEW), то също ще бъде изтрито. Алтернативата е с ключова дума RESTRICT, където ако има производно VIEW, то ще бъде върната грешка. По принцип не е добра идея да създавате производни една на друга виртуални таблици. Стойността по подразбиране на DROP VIEW e CASCADE.
2 коментара за “Виртуални таблици (view)”
Trackback URI | RSS за коментарите
Пусни коментар
Категории
- Бази от Данни (52)
- Вероятности (31)
- История (15)
- Кучета (69)
- Лада Нива (96)
- Математика (166)
- Методика (53)
- Общи работи (110)
- ПИК-3 Java (38)
- Политика (41)
- Програмни Среди (1)
- ПТСК (41)
- С/C++ (45)
- Семейни (16)
- Физика (35)
- ХHTML/JS (25)
- Храна (11)
Нови
- Извеждане на няколко произволни реда
- Full-Text търсене с InnoDB в MySQL
- Късметче от кафе
- Пред блока…
- Бушонно табло на Лада Нива
02 май 2012 на 21:56
Във CREATE VIEW заявката сте написали след името на виртуалната таблица в скоби , но по-надолу не виждам обяснение за какво се ползват тези колони. Може ли да поясните как участват те в заявката?
02 май 2012 на 23:04
Задава изрично имената на колоните в резултатната таблица вместо да използва тези от SELECT заявката.