poniedziałek,
Kategorie SQL
Język SQL (Structured Query Language) jest standardem w zarządzaniu bazami danych relacyjnymi. Został pierwotnie rozwinięty w latach siedemdziesiątych dwudziestego wieku w IBM przez grupę naukowców, w tym Donalda D. Chamberlina i Raymonda F. Boyce'a, na podstawie wcześniejszych prac Edgara F. Codda na temat modelu relacyjnego baz danych. Pierwsza komercyjna implementacja SQL pojawiła się w produkcie Oracle w końcu lat siedemdziesiątych. Od tamtej pory SQL ewoluował i był rozwijany przez wiele organizacji, w tym ANSI (American National Standards Institute) i ISO (International Organization for Standardization), które współpracują nad jego standaryzacją.
Kategorie SQL
Instrukcje języka SQL można podzielić na kilka kategorii.
DQL (Data Querying Language)
Zapytania pozwalają na pobieranie danych z baz danych. Najczęściej używanym zapytaniem jest SELECT
, które umożliwia wybór określonych danych z jednej lub wielu tabel. Pomysł języka zapytań został rozwinięty przez naukowców z IBM, takich jak Donald D. Chamberlin i Raymond F. Boyce, w latach siedemdziesiątych dwudziestego wieku.
DML (Data Manipulation Language)
DML dotyczy manipulacji i zarządzania danymi. Obejmuje instrukcje takie jak INSERT
(dodawanie danych), UPDATE
(aktualizacja danych) i DELETE
(usuwanie danych). Te operacje były częścią oryginalnej koncepcji SQL stworzonej przez Chamberlina i Boyce'a w IBM.
DDL (Data Definition Language)
DDL umożliwia tworzenie, modyfikowanie i usuwanie struktur bazy danych, takich jak tabele. Zawiera polecenia takie jak CREATE
, ALTER
i DROP
. Jako część systemu zarządzania bazą danych, DDL również wywodzi się z prac Chamberlina i Boyce'a.
DCL (Data Control Language)
DCL jest używany do nadawania i odbierania uprawnień dostępu do bazy danych. Obejmuje polecenia takie jak GRANT
i REVOKE
. Kontrola dostępu była rozwijana w ramach ewolucji SQL, a więc konkretni twórcy DCL nie są tak wyraźnie zdefiniowani, jak w przypadku innych elementów SQL.
TCL (Transaction Control Language)
TCL umożliwia zarządzanie transakcjami w bazie danych, zapewniając spójność danych. Zawiera polecenia takie jak COMMIT
, ROLLBACK
i SAVEPOINT
. Podobnie jak DCL, TCL jest wynikiem dalszego rozwoju SQL, a jego początki są związane z ogólnym rozwojem systemów zarządzania bazami danych.
Przykłady
Kategoria języka SQL (Structured Query Language) obejmuje różne aspekty i funkcje tego języka, używanego do zarządzania i manipulowania bazami danych. Prezentowane przykłady pokazują podstawowe operacje, które można wykonywać w SQL, obejmując szeroki zakres funkcjonalności od zapytań po kontrolę transakcji.
DQL (Data Querying Language)
SELECT: Wybieranie danych z bazy danych
SELECT imie, nazwisko FROM pracownicy;
JOIN: Łączenie tabel
SELECT pracownicy.imie, dzialy.nazwa_dzialu FROM pracownicy
JOIN dzialy ON pracownicy.id_dzialu = dzialy.id;
DML (Data Manipulation Language)
INSERT: Dodawanie nowych wierszy do tabeli
INSERT INTO pracownicy (imie, nazwisko) VALUES ('Jan', 'Kowalski');
UPDATE: Aktualizacja istniejących danych
UPDATE pracownicy SET nazwisko = 'Nowak' WHERE imie = 'Jan';
DELETE: Usuwanie danych z tabeli.
DELETE FROM pracownicy WHERE imie = 'Jan';
DDL (Data Definition Language)
CREATE: Tworzenie nowych tabel lub baz danych
CREATE TABLE pracownicy (id INT, imie VARCHAR(100), nazwisko VARCHAR(100));
ALTER: Modyfikacja istniejącej struktury tabeli
ALTER TABLE pracownicy ADD email VARCHAR(100);
DROP: Usuwanie tabeli lub bazy danych
DROP TABLE pracownicy;
DCL (Data Control Language)
GRANT: Nadawanie uprawnień
GRANT SELECT ON pracownicy TO uzytkownik;
REVOKE: Odbieranie uprawnień
REVOKE SELECT ON pracownicy FROM uzytkownik;
TCL (Transaction Control Language)
COMMIT: Zatwierdzanie transakcji
COMMIT;
ROLLBACK: Wycofywanie transakcji.
ROLLBACK;
SAVEPOINT: Tworzenie punktów kontrolnych w transakcji.
SAVEPOINT moj_savepoint;
Bardziej rozbudowany przykład
Pamiętaj, że składnia i zachowanie transakcji mogą się różnić w zależności od systemu zarządzania bazą danych, np. MySQL, PostgreSQL czy SQL Server.
-- Rozpoczęcie transakcji
START TRANSACTION;
-- Dodanie pierwszego zamówienia
INSERT INTO zamowienia (nazwa_produktu, ilosc) VALUES ('Produkt A', 10);
-- Utworzenie savepointa
SAVEPOINT po_pierwszym_zamowieniu;
-- Dodanie drugiego zamówienia
INSERT INTO zamowienia (nazwa_produktu, ilosc) VALUES ('Produkt B', 5);
-- Załóżmy, że wystąpił błąd i chcemy cofnąć transakcję do savepointa
ROLLBACK TO SAVEPOINT po_pierwszym_zamowieniu;
-- Dodanie innego zamówienia zamiast drugiego
INSERT INTO zamowienia (nazwa_produktu, ilosc) VALUES ('Produkt C', 20);
-- Zatwierdzenie całej transakcji
COMMIT;
W tym scenariuszu:
- Rozpoczynamy transakcję przy użyciu
START TRANSACTION
. - Dodajemy pierwsze zamówienie do tabeli.
- Tworzymy
SAVEPOINT
, który pozwala nam "zapamiętać" stan transakcji w tym punkcie. - Dodajemy drugie zamówienie.
- Jeśli chcemy cofnąć część transakcji (np. z powodu błędu), używamy
ROLLBACK TO SAVEPOINT
. To cofa transakcję do stanu zapisanego w savepoincie, czyli usunie tylko drugie zamówienie. - Dodajemy kolejne zamówienie, które zastępuje poprzednie.
- Na koniec, zatwierdzamy transakcję, używając
COMMIT
, co zapisuje wszystkie zmiany w bazie danych.