SQL Structured Query Language strukturalny język zapytań używany do tworzenia, modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych. Język SQL jest językiem deklaratywnym. Decyzję o sposobie przechowywania i pobrania danych pozostawia się systemowi zarządzania bazą danych (DBMS).
HISTORIA SQL został opracowany w latach 70. w firmie IBM. Stał się standardem w komunikacji z serwerami relacyjnych baz danych. Wiele współczesnych systemów relacyjnych baz danych używa do komunikacji z użytkownikiem SQL, dlatego potocznie mówi się, że korzystanie z relacyjnych baz danych to korzystanie z SQL-a. Pierwszą firmą, która włączyła SQL do swojego produktu komercyjnego, był Oracle. Dalsze wprowadzanie SQL-a, w produktach innych firm, wiązało się nierozłącznie z wprowadzaniem modyfikacji pierwotnego języka. Wkrótce utrzymanie dalszej jednolitości języka wymagało wprowadzenia standardu. Pierwotną nazwą języka miał być SEQUEL, jednakże okazało się, że nazwa ta była już zastrzeżona przez brytyjską wytwórnię lotniczą Hawker Siddeley.
FORMY SQL Z technicznego punktu widzenia, SQL jest podjęzykiem danych. Oznacza to, że jest on wykorzystywany wyłącznie do komunikacji z bazą danych. Nie posiada on cech pozwalających na tworzenie kompletnych programów. Jego wykorzystanie może być trojakie i z tego względu wyróżnia się trzy formy SQL-a:
SQL interakcyjny (autonomiczny) wykorzystywany jest przez użytkowników w celu bezpośredniego pobierania lub wprowadzania informacji do bazy. Przykładem może być zapytanie prowadzące do uzyskania zestawienia aktywności kont w miesiącu. Wynik jest wówczas przekazywany na ekran, z ewentualną opcją przekierowania go do pliku lub drukarki.
Statyczny kod SQL (Static SQL) nie ulega zmianom i pisany jest wraz z całą aplikacją, podczas której pracy jest wykorzystywany. Nie ulega zmianom w sensie zachowania niezmiennej treści instrukcji, które jednak zawierać mogą odwołania do zmiennych lub parametrów przekazujących wartości z lub do aplikacji. Statyczny SQL występuje w dwóch odmianach. 1. Embedded SQL (Osadzony SQL) oznacza włączenie kodu SQL do kodu źródłowego innego języka. Większość aplikacji pisana jest w takich językach jak C++ czy Java, jedynie odwołania do bazy danych realizowane są w SQL. W tej odmianie statycznego SQL-a do przenoszenia wartości wykorzystywane są zmienne. 2. Język modułów. W tym podejściu moduły SQL łączone są z modułami kodu w innym języku. Moduły kodu SQL przenoszą wartości do i z parametrów, podobnie jak to się dzieje przy wywoływaniu podprogramów w większości języków proceduralnych. Jest to pierwotne podejście, zaproponowane w standardzie SQL. Embedded SQL został do oficjalnej specyfikacji włączony nieco później.
Dynamiczny kod SQL (Dynamic SQL) generowany jest w trakcie pracy aplikacji. Wykorzystuje się go w miejsce podejścia statycznego, jeżeli w chwili pisania aplikacji nie jest możliwe określenie treści potrzebnych zapytań powstaje ona w oparciu o decyzje użytkownika. Tę formę SQL generują przede wszystkim takie narzędzia jak graficzne języki zapytań. Utworzenie odpowiedniego zapytania jest tu odpowiedzią na działania użytkownika. Wymagania tych trzech form różnią się i znajduje to odbicie w wykorzystywanych przez nie konstrukcjach językowych. Zarówno statyczny, jak i dynamiczny SQL uzupełniają formę autonomiczną cechami odpowiednimi tylko w określonych sytuacjach. Zasadnicza część języka pozostaje jednak dla wszystkich form identyczna.
BEZPIECZEŃSTWO Jako że SQL jest językiem interpretowanym, istnieje możliwość nadużyć w przypadku konstruowania zapytań z wykorzystaniem parametrów pochodzących z zewnątrz aplikacji. Szczególnie podatne na ten typ ataku są tworzone dynamicznie w oparciu o SQL-ową bazę danych serwisy internetowe. Jeśli twórca aplikacji nie zadba o sprawdzenie poprawności (tzw. walidację) danych wejściowych stanowiących część zapytania, atakujący może być w stanie dopisać do zapytania ( wstrzyknąć ) dodatkowe komendy lub zmienić ich sposób działania. Atak taki nosi nazwę SQL injection (wstrzyknięcie kodu za pomocą SQL).
MY SQL MySQL rozwijany jest przez firmę Oracle. Wcześniej przez większość czasu jego tworzeniem zajmowała się szwedzka firma MySQL AB. MySQL AB została kupiona 16 stycznia 2008 roku przez Sun Microsystems, a ten 27 stycznia 2010 roku przez Oracle [3]. W międzyczasie Monty Widenius (współtwórca MySQL) stworzył MariaDB forka (alternatywną wersję) opartego na licencji GPL. MariaDB jest oparta na tym samym kodzie bazowym co MySQL i dąży do utrzymania kompatybilności z jej poprzednimi wersjami
NAJWAŻNIEJSZE CECHY MYSQL MySQL był pisany raczej z myślą o szybkości niż kompatybilności ze standardem SQL przez dłuższy czas MySQL nie obsługiwał nawet transakcji, co było zresztą głównym argumentem przeciwników tego projektu. MySQL obsługuje większą część obecnego standardu ANSI/ISO SQL (tj. SQL:2003). Wprowadza również swoje rozszerzenia i nowe elementy języka [5]. W wersji 5 dodano m.in.: - procedury składowane (ang. stored procedures) obecne od wersji 5.0, Procedura ta zwraca nam imie i nazwisko na podstawi podanej zmiennej. Polecenie delimiter wskazuje nam znak zachęty końca kodu, musi być podany gdyż MySQL wykonuje procedure do znaku średnika.
- wyzwalacze (ang. triggers) obecne od wersji 5.0.2 Wyzwalacze (trigger) - wykonuję akcję na pewne zdefiniowane zdarzenie, które jest związane z konkretną tabelą i co się z tym wiąże również bazą danych. Wyzwalacze są uruchomiane automatycznie i nie ma możliwości ich wywołania inaczej niż przez zdefiniowane zdarzenie.
- widoki
- Kursory - w systemach zarządzania bazą danych jest to tymczasowa struktura służąca do pobierania wyniku zapytania SQL. Kursor umożliwia pobieranie rekordów sekwencyjnie, po jednym lub więcej na raz, a także przemieszczanie się po wynikach zapytania. Przykładowy kursor w języku SQL -partycjonowanie tabel od wersji 5.1 -harmonogram zadań od wersji 5.1 co zbliża najnowsze wersje MySQL do PostgreSQL pod względem funkcjonalności.
MySQL zawiera wsparcie dla replikacji bazy danych (w trybie masterslave) i wielojęzyczności każda tabela i kolumna może mieć własne ustawienie kodowania znaków. W najnowszej wersji rozwojowej 5.6 wprowadzono kilka istotnych zmian poprawiających skalowalność i niezawodność środowiska, oraz wprowadzających nowatorskie rozwiązania, np.: semi-synchroniczna replikacja replikacja wielowątkowa rozbudowane możliwości monitorowania przez tzw. PERFORMANCE_SCHEMA interfejs API typu NoSQL z wykorzystaniem memcached
PLATFORMY MYSQL Serwer MySQL dostępny jest dla wszystkich popularnych platform systemowych i różnorakich architektu procesorów. Jest dostępny także w wersji źródłowej, co umożliwia skompilowanie go dla dowolnej innej platformy. Podobnie jak serwer również biblioteki klienckie MySQL, umożliwiające korzystanie z tego serwera bazodanowego z poziomu aplikacji, dostępne są dla wielu platform i języków programowania m.in. dla C, C++, Delphi, czy PHP.
LICENCJONOWANIE MySQL jest dostępny na licencji GPL, jednakże można nabyć również wersje licencjonowane komercyjnie. Biblioteki klienckie są również dostępne na licencji GPL lub komercyjnej. Istnieje wymóg nabycia licencji komercyjnej jeśli zamierzamy dystrybuować aplikację komercyjną (niezgodną z licencją GPL), wraz ze zintegrowaną bazą MySQL. Zmiana licencji nastąpiła od wersji 4.1 (i późniejszych) i była jednym z powodów rezygnacji w PHP z domyślnie włączonej obsługi MySQL na rzecz SQLite (oczywiście obsługę MySQL można samemu w PHP włączyć).
NARZĘDZIA ADMINISTRACYJNE phpmyadmin za pomocą przeglądarki internetowej MySQL Workbench MySQL Query Browser
POSTGRESQL PostgreSQL często nazywany także Postgres to, obok MySQL i Firebird, jeden z trzech najpopularniejszych wolnodostępnych systemów zarządzania relacyjnymi bazami danych. Początkowo opracowywany na Uniwersytecie Kalifornijskim w Berkeley i opublikowany pod nazwą Ingres. W miarę rozwoju i zwiększania funkcjonalności, baza danych otrzymała nazwy Postgres95 i ostatecznie PostgreSQL, aby upamiętnić pierwowzór oraz zaznaczyć zgodność ze standardem SQL. Aktualnie baza implementuje większość standardu SQL:2011. PostgreSQL zalicza się do baz typu RDBMS(System zarządzania relacyjną bazą danych) z rozszerzeniami obiektowymi.
HISTORIA Swoimi korzeniami PostgreSQL sięga 1977 roku. Wszystko zaczęło sie od projektu Ingres, opracowanego na Uniwersytecie Barkley w Kaliforni. Ingres zastał wydany później jako produkt komercyjny przez firmę Relational Technologies/Ingres Corporation. Kontynuacje prac nad kodem bazy Ingres podjęto w 1986 roku pod kierownictwem profesora Michaela Stonebrakera, opracowując system zarządzania relacyjnymi bazami danych o nazwie Postgres. W 1995 roku Postgres przemianowano na Postgre95 w związku z wprowadzeniem języka SQL (ang. Structured Query Language), a w 1996 na PostgreSQL. Obecnie nadal jest prowadzony rozwój PostgreSQL a koordynatorem jest Marc G. Fournier który prowadzi projekt wraz z grupą ludzi z całego świata przez Internetu, komunikując sie po przez listy dyskusyjne PostgreSQL. Autorami PostgreSQL 1.01 bazującego na kodzie Postgresa byli: Andrew Yu i Jolly Chen.
PLATFORMY PostgreSQL działa na następujących systemach operacyjnych: Linux (wszystkie niedawne dystrybucje), Windows(Win2000 SP4 i późniejszy), FreeBSD, OpenBSD, NetBSD, Mac OS X, AIX, BSD/OS, HP-UX, IRIX, OpenIndiana, OpenSolaris, SCO OpenServer, SCO UnixWare, Solaris and Tru64 Unix. W 2012 r. wsparcie dla następujących systemów zostało usunięte: DG/UX, NeXTSTEP, SunOS 4, SVR4, Ultrix 4 oraz Univel. Większość pozostałych systemów Uniksowych również powinna działać
NAJWAŻNIEJSZE CECHY - Funkcje: W samej bazie można pisać procedury składowane w różnych językach programowania. Domyślnie dostępne są: PL/pgSQL, podobny do proceduralnego języka PL/SQL w bazie Oracle; PL/Python; PL/Perl; PL/Tcl; język SQL (procedura to ciąg parametryzowanych instrukcji SQL). Dodatkowo można zainstalować wiele rozszerzeń.
INDEKSY W PostgreSQL zaimplementowano obsługę wielu typów indeksów, do których należą: B-drzewo, Hash, R-drzewo, GiST, SP-GiST i GIN. Indeksy można utworzyć zarówno na kolumnie, lub kolumnach tabeli jak i widoku zmaterializowanego. Składnia zapytania tworzącego indeks w PostgreSQL
- wyzwalacze Posiadają mechanizm wyzwalaczy (ang. triggers). Wyzwalacze są uruchamiane automatycznie przed lub po operacjach takich jak UPDATE, INSERT, DELETE i TRUNCATE. Do widoków można użyć mechanizmu reguł (ang. rules) by w ten sposób symulować możliwość zmieniania danych w widoku, który w PostgreSQLu jest z zasady tylko do odczytu. Przykład:
- MVCC PostgreSQL ma zaimplementowany mechanizm MVCC (Multiversion Concurrency Control) do zarządzania transakcjami. Mechanizm ten umożliwia udostępnienie tej samej krotki więcej niż jednej transakcji. Równocześnie może istnieć przynajmniej kilka wersji tej samej krotki, które nie są widoczne dla innych użytkowników do zakończenia danych transakcji. Dzięki temu baza danych wydajnie zachowuje zasadę ACID(zbiór właściwości, które gwarantują poprawne przetwarzanie transakcji w bazach danych). - Reguły są to elementy aktywne, które mogą być stosowane m.in. jako rozszerzenie widoków. Za pomocą reguł można zrealizować widoki modyfikujące, jako że reguły mogą mieć w definicji klauzulę INSTEAD OF co spowoduje, że robiąc zapytanie INSERT wstawiające dane do widoku, reguła zamiast tego zapytania zrobi inne, które wstawi dane do tabeli (bądź wielu tabel), z której widok odczytuje dane.
- Typy danych Rozszerzona jest definicja typów danych o nowe typy m.in: typ logiczny (boolean) typy liczbowe liczby całkowitych (smallint, integer, bigint) liczby zmiennoprzecinkowych (real, double precision) liczby niecałkowite o dokładnej reprezentacji (numeric, decimal) typy tekstowe (text, character alias char, character varying alias varchar) typy binarne (bit, bit varying) typy do przechowywania daty i czasu (timestamp/time with/without timezone, date, interval) typ do obliczeń walutowych (money) - typ ten nie jest zalecany do użytku typ wyliczeniowy (enum) typ złożony (rekordowy) typ tablicowy typy do wyszukiwania pełnotekstowego (tsvector, tsquery) typy geometryczne (point, line, lseg, box, path, polygon, circle) typy adresów sieciowych (cidr, inet, macaddr) XML, obsługujący również wyrażenia XPath (od wersji 8.3) UUID (od wersji 8.3) JSON (od wersji 9.2) typy zakresowe (Range Type) (od wersji 9.2) Dodatkowo użytkownicy mogą definiować własne typy danych [.
- Obiekty definiowane przez użytkownika Można tworzyć większość obiektów bazodanowych m.in.: rzutowania konwersje typów typy danych domeny funkcje, włączając w to funkcje agregujące indeksy, włączając w to indeksy dla definiowanych typów danych operatory, istniejące mogę być nadpisane języki proceduralne
Ograniczenia wielkości elementów bazy Nazwa ograniczenia Maksymalny rozmiar bazy Maksymalny rozmiar tabeli Maksymalny rozmiar wiersza Maksymalny rozmiar pola w wierszu Maksymalna liczba wierszy w tabeli Maksymalna liczba kolumn w tabeli Maksymalna liczba indeksów dla tabeli Wartość bez ograniczeń 32 TB 1,6 TB 1 GB bez ograniczeń 250-1600 (zależy od rodzaju kolumn) bez ograniczeń
-Inne cechy Silnik ten zawiera wiele obiektowych rozszerzeń takich jak możliwość definiowania nowych typów podstawowych i dziedziczenia typów tablic. Posiada zaawansowany system transakcji, dwufazowe zatwierdzanie (2PC) i możliwość dodawania funkcjonalności m.in. dzięki modułom zawartym w zbiorze contrib. Jednym z pierwszorzędnych celów twórców PostgreSQL jest jak największa zgodność ze standardem SQL. PostgreSQL jest dostępny na licencji Postgresql, podobnej do licencji BSD oraz licencji MIT
INNE SYSTEMY SQL system zarządzania relacyjnymi bazami danych zgodny ze standardem ANSI SQL-92; obok MySQL oraz PostgreSQL jest jednym z trzech najpopularniejszych wolnodostępnych systemów zarządzania bazą danych. Oferuje również wiele elementów standardu SQL-99 oraz SQL:2003. Działa w środowisku systemu operacyjnego Linux, Windows, Mac OS X i wielu innych. Może być używany bez rejestrowania lub wnoszenia jakichkolwiek opłat w dowolnych zastosowaniach, również komercyjnych.
WŁAŚCIWOŚCI Pełna obsługa procedur składowanych oraz wyzwalaczy Transakcje zgodne z ACID Integralność referencji Obsługa wielu wersji tego samego rekordu (ang. Multi Generational Architecture; MVCC) Wymaga niewielkiej pojemności dysku do przechowywania plików kodu wykonywalnego serwera baz danych (ang. footprint) PSQL - wewnętrzny język serwera, posiadający wiele możliwości i funkcje do obsługi procedur wbudowanych oraz wyzwalaczy Obsługa funkcji zdefiniowanych przez użytkownika - dołączanych w postaci bibliotek *.DLL lub *.so (UDFs) System zarządzania relacyjnymi bazami danych nie wymaga specjalistycznej wiedzy od użytkownika
W domyślnej instalacji nie jest wymagana dodatkowa konfiguracja - wystarczy zainstalować i od razu można używać Jest wiele miejsc, w których użytkownik może otrzymać fachowe i darmowe wsparcie techniczne Specjalne wydanie wersji wbudowanej (ang. embedded version), w postaci jednego dołączanego pliku, umożliwia tworzenie aplikacji na nośnikach CD/DVD itp., aplikacji jednostanowiskowych a także wersji prezentacyjnych programów dla użytkowników w celach testowych Wiele narzędzi (również graficznych) do zarządzania, replikacji danych itd. Format zapisu danych umożliwia szybkie przywrócenie bazy z kopii bezpieczeństwa - nie są wymagane przy tym logi transakcji Wiele możliwości dostępu do serwera baz danych: native/api, sterowniki dbexpress, ODBC, OLEDB, dostawca danych platformy.net, sterownik JDBC 4, moduły Python, PHP, Perl, itd. Obsługa wszystkich popularnych systemów operacyjnych - Windows, Linux, MacOS i innych. Kopie przyrostowe Wersje 64 bitowe Pełna implementacja kursorów w PSQL
relacyjny serwer danych z rodziny Information Management Software. rodzina produktów Systemów Zarządzania Bazami Danych (SZBD) firmy IBM. Informix jest oferowany jako flagowy serwer dla przetwarzania transakcyjnego (OLTP) jak i rozwiązań zintegrowanych. IBM nabył technologię Informix w 2001 od Informix Software.
Baza danych stworzona przez grupę (głównie) byłych pracowników MySQL AB, pod przewodnictwem Michaela Wideniusa, współtwórcy MySQL. Celem głównym projektu jest współpraca ze społecznością wolneg oprogramowania i udostępnianie jej na licencji GPL, w przeciwieństwie do niepewnego statusu licencji MySQL, która zależy teraz od firmy Oracle. Autorzy MariaDB stawiają sobie również za cel utrzymanie kompatybilności z wcześniejszymi wersjami MySQL.
Microsoft SQL Server (MS SQL) to system zarządzania bazą danych, wspierany i rozpowszechniany przez korporację Microsoft. Jest to główny produkt bazodanowy tej firmy, który charakteryzuje się tym, iż jako język zapytań używany jest przede wszystkim Transact-SQL, który stanowi rozwinięcie standardu ANSI/ISO. MS SQL Server jest platformą bazodanową typu klient-serwer. W stosunku do Microsoft Jet, który stosowany jest w programie MS Access, odznacza się lepszą wydajnością, niezawodnością i skalowalnością. Przede wszystkim są tu zaimplementowane wszelkie mechanizmy wpływające na bezpieczeństwo operacji (m.in. procedury wyzwalane).
MYSQL VS POSTGRESQL VS FIREBIRD Wydawać by się mogło, że ze względu na znacznie większą liczbę możliwości Firebird i PostgreSQL będą bazami o wiele bardziej skomplikowanymi w użyciu. Nie jest to jednak prawda. Wymagana na początku wiedza jest taka sama dla każdej z tych baz. Wystarczy znać podstawowe komendy języka SQL i metody kontroli transakcji. Co więcej, każda z tych baz dysponuje wygodnymi graficznymi interfejsami użytkownika, podobnymi do zaawansowanych narzędzi z komercyjnych systemów. W przypadku MySQL-a są to MySQL Administrator czy znany i lubiany MyPHPAdmin. PostgreSQL korzysta obecnie z pgadmina III, Firebird zaś z chyba najpotężniejszego spośród nich FlameRobina.
Do postawienia prostej bazy danych na typowym pececie MySQL wydaje się narzędziem w pełni wystarczającym. Jeśli mamy jednak do dyspozycji trochę szybszy sprzęt, w niczym nie zaszkodzi spróbować Firebirda czy PostgreSQLa obie te bazy danych są łatwe we wdrożeniu i późniejszym administrowaniu oraz oferują znacznie większą zgodność ze standardami. W przypadku zastosowań w pełni profesjonalnych, produkcyjnych, pomimo imponującego tempa rozwoju MySQL-a nie wydaje się, by baza ta dojrzała już do zastosowań domagających się pełnej zgodności z ACID. Być może istotna jest też kwestia kompatybilności: mimo że producenci każdej z tych baz deklarują pełną zgodność ze wszystkimi ważnymi systemami operacyjnymi, to spośród oferowanych wersji binarnych dla Windows jedynie Firebird zachowywał się w pełni stabilnie na komputerze autora (Windows 2000 wewnątrz VMware).
PODSUMOWANIE MySQL - prosta baza do prostych aplikacji, głównie webowych, dość problematyczna w utrzymaniu ze wzrostem objętości. PostgreSQL - poważna baza Open Source, o ogromnych możliwościach, z rewelacyjnym zapleczem i wsparciem "społeczeństwa". Bardzo elastyczna w konfiguracji, można z niej wiele wycisnąć. Nadaje się zarówno na bazę dla serwisu WWW, jak i dla dużego systemu tranzakcyjnego. Oracle - baza za którą stoi duża korporacja, o ogromnych możliwościach, standard przemysłowy, ale droga - co za tym idzie nadaje się tylko do dużych projektów z dużym budżetem.
BIBLIOGRAFIA http://9fingers.pl/ www.wikipedia.pl www.webhosting.pl www.phpedia.pl