SQL to dla nas wszystko

Jak zapewne już się domyślasz, wszystkie polecenia do serwera SQL można wydawać za pomocą zapytań SQL. Wszystko.

Zespoły te są oficjalnie podzielone na 4 grupy:

  • instrukcje definicji danych (język definicji danych, DDL ):

    • CREATE tworzy obiekt bazy danych (samą bazę danych, tabelę, widok, użytkownika itd.)
    • ALTER zmienia obiekt
    • DROP usuwa obiekt
  • operatory manipulacji danymi (Data Manipulation Language, DML ):

    • SELECT wybiera dane, które spełniają podane warunki
    • INSERT dodaje nowe dane
    • UPDATE zmienia istniejące dane
    • DELETE usuwa dane
  • operatory definicji dostępu do danych (Data Control Language, DCL ):

    • GRANT przyznaje użytkownikowi (grupie) uprawnienia do wykonywania określonych operacji na obiekcie
    • REVOKE cofa wcześniej wydane uprawnienia
    • DENY ustanawia zakaz, który ma pierwszeństwo przed zezwoleniem
  • Oświadczenia w języku kontroli transakcji ( TCL ) :

    • COMMIT stosuje transakcję
    • ROLLBACK wycofuje wszystkie zmiany dokonane w kontekście bieżącej transakcji
    • SAVEPOINT dzieli transakcję na mniejsze części

A na pierwszych dwóch poziomach badaliśmy tylko odmiany instrukcji SELECT. Wyobraź sobie, ile ciekawych rzeczy czeka nas w przyszłości.

Ale przygotowujemy się tutaj przede wszystkim o programistach Java, więc przestudiujemy te scenariusze, z którymi na pewno spotkasz się w pracy.

Administrator systemu w projekcie najprawdopodobniej stworzy wszystkie bazy danych, ale na pewno będziesz musiał wielokrotnie dokonywać selekcji z danych.

Co więcej, czasami Twój kod nie zapisze wszystkich danych do bazy danych lub zapisze je w niewłaściwy sposób, więc często będziesz musiał wspiąć się do niego z długopisami i zobaczyć, co faktycznie jest tam zapisane.

Wróćmy jeszcze raz do spraw, które poruszyliśmy na poprzednich wykładach.

Tworzenie schematu w bazie danych

Aby utworzyć nowy schemat w DBMS, należy uruchomić polecenie:

CREATE SCHEMA Name;

To najłatwiejsza opcja. Ponadto podczas tworzenia nowego schematu można określić format kodowania danych i inne parametry.

Jeśli chcesz usunąć schemat, ale nie jesteś pewien, czy istnieje, musisz uruchomić polecenie:

DROP SCHEMA IF EXIST Name;

Często zobaczysz te polecenia w plikach z kopiami zapasowymi różnych baz danych, dlatego przynoszę je tutaj.

Wybór aktualnego schematu

Jeśli masz wiele schematów w DBMS, łatwo może się zdarzyć, że różne schematy mają te same tabele. Aby uniknąć nieporozumień, możesz zrobić dwie rzeczy:

  • Zawsze umieszczaj nazwę schematu przed nazwą tabeli
  • Określ schemat domyślny

Napiszmy zapytanie, które wybierze dane z tabeli użytkownika , która znajduje się w schemacie testowym . Będzie to wyglądać mniej więcej tak:

SELECT * FROM test.user;

Jest to po prostu niezbędne, jeśli chcesz dołączyć (JOIN) kilka tabel z różnych schematów w jednym zapytaniu.

Nawiasem mówiąc, w języku Java często robimy coś podobnego: jeśli w kodzie musimy użyć klas o tej samej nazwie z różnych pakietów, dodajemy nazwę pakietu przed nazwą klasy.

Drugim sposobem jest określenie schematu domyślnego . Jeśli zapytanie określa nazwę tabeli, ale nie zawiera schematu, używany jest schemat domyślny. Aby to zrobić, użyj instrukcji USE :

USE name - schemes;

Przepiszmy poprzednie zapytanie, używając instrukcji USE:

USE test;
SELECT * FROM user;

Tworzenie widoku

Oprócz tabel z rzeczywistymi danymi SQL umożliwia przechowywanie czegoś w rodzaju wirtualnych tabel, w których dane są pobierane z rzeczywistych tabel. Takie wirtualne tabele nazywane są VIEW.

Taka tabela nie może przechowywać prawdziwych danych i za każdym razem, gdy uzyskuje się do niej dostęp, pobiera dane z prawdziwych tabel. Zawartość takiego WIDOKA jest określana za pomocą zapytania SQL.

Możesz utworzyć WIDOK z dowolnego zapytania SELECT za pomocą polecenia takiego jak:

CREATE VIEW Name AS
SELECT-request;
Napiszmy zapytanie, które utworzy wirtualną tabelę public_employee na podstawie tabeli pracowników, w której zostaną ukryte informacje o wynagrodzeniu pracownika:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

W powyższym przykładzie nasza tabela (WIDOK) public_employee będzie zawierała tylko identyfikatory pracowników i ich nazwiska, ale nie informacje o ich wynagrodzeniu. Możesz korzystać z takich widoków w tym samym miejscu, co prawdziwe stoły.

Dlaczego potrzebne są widoki? Mają szereg zalet:

Elastyczna kontrola dostępu do informacji . Możesz dać niektórym użytkownikom dostęp tylko do VIEW, ale nie do tabel. A w widoku usuwaj z tabel tylko informacje publiczne. Ponadto, jeśli w przyszłości do tabel zostaną dodane nowe kolumny z ważnymi informacjami, nie trafi to przypadkowo do Widoku.

Denormalizacja danych . Dla wygody przechowywania dane są często dzielone na setki i tysiące tabel, ale praca z takimi danymi dla zwykłego człowieka nie jest zbyt wygodna - trzeba pisać zbyt skomplikowane zapytania. Dzięki View możesz tworzyć wirtualne tabele, które wyświetlają dane z dziesiątek różnych tabel w jednej tabeli.

Polimorfizm i enkapsulacja . Możesz zmieniać struktury swojej bazy danych. Jednocześnie użytkownicy programu pracujący z Twoimi Widokami nie zgadną, że coś się zmieniło. I nie będzie potrzeby przepisywania kodu programów, które mają dostęp do View. Wystarczy zmodyfikować skrypt SQL, który jest powiązany z VIEW.

Tylko do odczytu . Widok można ustawić tylko za pomocą zapytania SELECT, więc praca z widokiem nie może w żaden sposób zmieniać danych w rzeczywistych tabelach. Nawiasem mówiąc, jest to kolejny plus przemawiający za buforowaniem zapytań. Ale o tym następnym razem.