Tworzenie widoków w mysql

Lekcja: Tworzenie Widoków w MySQL – CREATE VIEW

Cel lekcji:

Poznanie widoków w MySQL, ich zastosowania, zalet oraz umiejętność tworzenia i zarządzania widokami przy użyciu polecenia CREATE VIEW.


Czym jest widok (VIEW)?

Widok to zapisane zapytanie SQL, które działa jak wirtualna tabela. Widok nie przechowuje danych fizycznie w bazie danych, lecz przechowuje definicję zapytania, które jest wykonywane przy każdym odwołaniu do widoku.

Zalety korzystania z widoków:

  1. Abstrakcja i uproszczenie: Widoki pozwalają ukryć złożoność zapytań SQL.
  2. Bezpieczeństwo: Można ograniczyć dostęp do określonych danych, prezentując je za pomocą widoków.
  3. Reużywalność: Widok może być używany w wielu miejscach bez powtarzania złożonego kodu SQL.
  4. Utrzymanie spójności: Zmiany w bazowej definicji widoku automatycznie aktualizują jego wyniki.

Tworzenie widoków w MySQL

Składnia:

CREATE VIEW nazwa_widoku AS zapytanie_sql;
  • nazwa_widoku – nazwa tworzonego widoku.
  • zapytanie_sql – zapytanie, które definiuje widok.

Przykład 1: Tworzenie prostego widoku

Załóżmy, że mamy tabelę pracownicy:

CREATE TABLE pracownicy (
    id INT PRIMARY KEY,
    imie VARCHAR(50),
    nazwisko VARCHAR(50),
    dzial VARCHAR(50),
    pensja DECIMAL(10,2)
);

Chcemy stworzyć widok pokazujący pracowników działu „Sprzedaż”:

CREATE VIEW sprzedaz_pracownicy AS
SELECT imie, nazwisko, pensja
FROM pracownicy
WHERE dzial = 'Sprzedaż';

Po utworzeniu widoku możemy go używać jak zwykłej tabeli:

SELECT * FROM sprzedaz_pracownicy;

Przykład 2: Widok z aliasami i obliczeniami

Widok może zawierać aliasy kolumn i obliczenia:

CREATE VIEW wysokie_pensje AS
SELECT imie, nazwisko, pensja * 12 AS roczna_pensja
FROM pracownicy
WHERE pensja > 5000;

Zarządzanie widokami

Usuwanie widoku

Aby usunąć widok, używamy polecenia DROP VIEW:

DROP VIEW nazwa_widoku;

Przykład:

DROP VIEW sprzedaz_pracownicy;

Aktualizacja widoku

Widok sam w sobie nie przechowuje danych, ale odwołuje się do tabel bazowych. Jeśli dane w tabelach się zmienią, wyniki widoku także ulegną zmianie.


Ograniczenia widoków w MySQL

  1. Widoki w MySQL są tylko do odczytu, jeśli zapytanie definiujące widok jest zbyt złożone (np. zawiera agregaty, grupowania lub podzapytania).
  2. Widoki nie mogą zawierać zmiennych użytkownika, funkcji proceduralnych czy tabel tymczasowych.
  3. Modyfikowanie danych poprzez widok jest możliwe, ale tylko wtedy, gdy widok spełnia odpowiednie warunki (np. odnosi się do jednej tabeli, bez funkcji agregujących).

Przykłady zastosowań widoków

Przykład 1: Widok do raportowania

Załóżmy, że mamy tabelę zamowienia:

CREATE TABLE zamowienia (
    id INT PRIMARY KEY,
    klient VARCHAR(50),
    kwota DECIMAL(10,2),
    status VARCHAR(20)
);

Tworzymy widok pokazujący tylko zamówienia zatwierdzone:

CREATE VIEW zatwierdzone_zamowienia AS
SELECT klient, kwota
FROM zamowienia
WHERE status = 'Zatwierdzone';

Przykład 2: Widok do uproszczenia analizy danych

Widok zliczający liczbę zamówień dla każdego klienta:

CREATE VIEW liczba_zamowien_klientow AS
SELECT klient, COUNT(*) AS liczba_zamowien
FROM zamowienia
GROUP BY klient;

Zadania praktyczne

  1. Tworzenie widoku: Stwórz widok wysokie_zamowienia na podstawie tabeli zamowienia, który pokaże zamówienia o wartości większej niż 1000 zł.

  2. Używanie widoku: Napisz zapytanie, które wyświetli dane z widoku wysokie_zamowienia.

  3. Edytowanie widoku: Zmień widok wysokie_zamowienia, aby uwzględniał tylko zatwierdzone zamówienia.

  4. Usunięcie widoku: Usuń widok wysokie_zamowienia.


Podsumowanie

  • Widoki są potężnym narzędziem do uproszczenia złożonych zapytań i ochrony danych.
  • Dzięki widokom można tworzyć warstwy abstrakcji w bazie danych, co ułatwia zarządzanie i utrzymanie systemu.
  • Praca z widokami wymaga zrozumienia relacji między widokiem a tabelą bazową oraz ograniczeń widoków w MySQL.

CREATE TABLE zamowienia (
    id INT AUTO_INCREMENT PRIMARY KEY,
    klient VARCHAR(50) NOT NULL,
    kwota DECIMAL(10,2) NOT NULL,
    status VARCHAR(20) NOT NULL
);

INSERT INTO zamowienia (klient, kwota, status) VALUES
('Klient A', 1200.00, 'Zatwierdzone'),
('Klient B', 800.00, 'Oczekujące'),
('Klient C', 2000.00, 'Zatwierdzone'),
('Klient D', 500.00, 'Anulowane'),
('Klient A', 1500.00, 'Zatwierdzone'),
('Klient E', 3000.00, 'Oczekujące');