* Виртуални таблици (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.
Trackback URI | RSS за коментарите
Пусни коментар
Категории
- Бази от Данни (39)
- Вероятности (30)
- История (14)
- Кучета (67)
- Лада Нива (91)
- Математика (159)
- Методика (52)
- Общи работи (107)
- ПИК-3 Java (38)
- Политика (40)
- Програмни Среди (1)
- ПТСК (37)
- С/C++ (45)
- Семейни (15)
- Физика (35)
- ХHTML/JS (25)
- Храна (11)
Нови
- Как да разрежем хляба?
- Здравей бебе!
- Какво означават метеорологичните кодове?
- Берра проправя пътеки
- Задача от YES