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;
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.