WSTĘP
SQL (Structured Query Language - strukturalny język zapytań) jest to podstawowy język baz danych, oparty na modelu relacyjnym.
W tej pracy opisany jest oficjalny standard języka baz danych SQL o nazwie SQL/92. SQL został przyjęty jako międzynarodowy standard przez International Organization for Standardization (ISO) i jako narodowy standard w wielu krajach, w tym w szczególności w Stanach Zjednoczonych, gdzie jest teraz zarówno standardem American National Standards Institute (ANSI), jak i standardem Federal Information Processing Standard (FIPS). Ponadto od kilku lat na rynku jest dostępnych wiele produktów opartych na SQL.
Nie ma więc wątpliwości, że przynajmniej z komercyjnego punktu widzenia SQL odgrywa niezmiernie ważną rolę w świecie baz danych.
Praca jest podzielona na cztery części - wstęp, rozdział I, rozdział II oraz zakończenie
Wstęp stanowi przygotowanie do studiowania następnych części pracy. Streszcza ona w dużej mierze następne rozdziały.
Rozdział I wyjaśnia, co to jest standard, opisuje historię języka, podstawowe pojęcia konieczne do zrozumienia relacyjnych baz danych oraz poleceń języka SQL. Ogólne polecenia i funkcje SQL są opisane alfabetycznie.
W rozdziale II obrazuje wygląd strony internetowej, na które znajduje się serwis dotyczący SQL oraz internetowy słownik SQL. Znajduje się tam również spis haseł według alfabetu i według kategorii.
Zakończenie zawiera podsumowanie pracy.
WPROWADZENIE
SQL - Strukturalny Język Zapytań (ang. Stuctured Query Language) jest językiem czwartej generacji, który został w ciągu wielu lat opracowany przez grupę badawczą IBM. Stał się międzynarodowym standardem dla języków baz danych i występuje obecnie w produktach większości liczących się firm, zajmujących się sprzedażą oprogramowania dla baz danych.
Ponieważ SQL jest językiem standaryzowanym, dostęp do danych jest możliwy przez wiele różnych platform sprzętowych, w tym komputery osobiste, mikrokomputery i duże komputery. Inna korzyść związana z SQL polega na tym, że takie oprogramowanie jak arkusze kalkulacyjne czy procesory tekstów może importować dane z baz danych opartych na SQL.
Polecenia SQL maja postać zbliżoną do zdań w języku angielskim i są stosowane w celu uzyskania dostępu do danych i sterowania operacjami w bazie danych. Użytkownik mający małe doświadczenie w przetwarzaniu danych lub nie mający go wcale, może szybko nauczyć się podstawowych konstrukcji SQL
ekspert od przetwarzania danych może znaleźć w tym języku pełny zestaw potrzebnych mu narzędzi. Zatem jest to język, którego używają zarówno zwykli użytkownicy, jak i fachowcy od przetwarzania danych.
SQL jest językiem strukturalnym, zdefiniowanym za pomocą reguł składniowych. Występują w nim trzy rodzaje poleceń. Pierwszy to polecenia języka definiowania danych, które umożliwiają tworzenie obiektów bazy danych, takie jak tabela i perspektywy. Drugi rodzaj to polecenia języka operowania danymi, które są używane do wydobywania informacji z bazy danych, usuwania informacji z bazy danych i dodawania ich do niej. Trzeci rodzaj to polecenia języka administrowania danymi, które służą do przyznawania i odwoływania uprawnienia dostępu do bazy danych.
Użytkownik może korzystać z poleceń SQL w sposób interakcyjny bądź za pomocą takiego interfejsu jak zapytanie przez przykład ( QBE ).
Język SQL jest przeznaczony dla wielu różnych grup odbiorców:
· zwykłych użytkowników
· ekspertów od przetwarzania danych
· twórców programów użytkowych (aplikacji)
· administratorów baz danych
· kadry kierowniczej
· personelu centrum informacji i dla wielu innych
Kiedy używa się SQL, wszystkie dane są dostępne za pomocą standardowego interfejsu użytkownika. Użytkownicy i komputery "rozmawiają" jednym i tym samym językiem. Ze względu na stosowanie SQL zmniejsza się czas szkolenia potrzebnego przy zmianie miejsca pracy i systemu przez pracownika.
Język SQL jest o wiele bardziej wydajny niż tradycyjne języki programowania, takie jak np. Cobol. Program może być zapisany w kilku wierszach kodu, a nie jak w przypadku tradycyjnego języka programowania - na kilku stronach. Z tego powodu koszty tworzenia aplikacji są jedynie ułamkiem kosztów występujących przy użyciu tradycyjnych języków.
SQL może być użyty jako standardowe narzędzie umożliwiające dostęp do danych w różnorodnych środowiskach z różnym sprzętem komputerowym i różnymi systemami operacyjnymi.
ROZDZIAŁ I
Standard języka SQL
Język SQL opracowany został w firmie IBM w latach siedemdziesiątych. Pierwszą firmą, która włączyła go do swojego produktu, był Oracle. Dalsze wprowadzanie SQL, w produktach innych firm, wiązało się nierozłącznie z wprowadzeniem modyfikacji pierwotnego języka. Wkrótce utrzymanie dalszej jednolitości języka wymagało wprowadzenia standardu.
W 1986 roku SQL stał się oficjalnym standardem, wspieranym przez Międzynarodową Organizację Normalizacyjną (ISO) i jej członka, Amerykański Instytut Normalizacji (ANSI). Wczesne wersje specyfikacji (SQL86 i SQL89) były w dużej mierze jedynie określeniem wspólnej płaszczyzny łączącej różne istniejące wówczas produkty i pozostawiały dużo swobody twórcom implementacji. Z czasem jednak systemy komputerowe uległy integracji i rynek zaczął domagać się aplikacji oraz ich funkcji fabrycznie współpracujących z różnymi bazami danych. Pojawiła się potrzeba określenia standardu ściślejszego. Mógł on jednocześnie obejmować nowe elementy, nie ujęte wcześniej w języku. Standard ten został przyjęty pod nazwą SQL92. Standard ten jest używany obecnie najczęściej.
Specyfikacja SQL92 objęła nowe elementy języka i uporządkowała wiele
z tych, które wcześniej producenci dołączali do niego samodzielnie. Najważniejszą jednak jej cecha jest względna zupełność. W intencji ISO użytkownik znający SQL92, wyposażony jedynie w podstawy wiedzy o konkretnych systemach może w ten sam sposób wykonywać operacje na zgodnych ze specyfikacją bazach danych, a także wprowadzać do niech nowe informacje.
Najnowszą specyfikacją SQL jest SQL99. Jest ona bardzo złożona
i nie jest wciąż jasne, jak szerokie zainteresowanie znajdzie wśród producentów.
Jest raczej mało prawdopodobne, by którykolwiek produkt uwzględniał wszystkie ujęte w SQL99 elementy.
Podstawowe elementy języka
Znaki języka SQL
Polecenia SQL zawierają trzy kategorie składni: identyfikatory, literały oraz słowa kluczowe i zarezerwowane. Identyfikatory to nazwy obiektów stworzonych przez użytkownika lub proces systemowy, takich jak bazy danych, tabele, kolumny w tabelach czy perspektywy. Literały to wartości nie będące wartościami NULL wprowadzone do systemu. Słowa zarezerwowane i kluczowe na przykład CREATE, DROP czy SELECT, to słowa mające specjalne znaczenie dla bazy danych SQL.
Identyfikatory
Należy wiedzieć, że systemy działające z SQL są oparte na teorii mnogości: klastry zawierają zbiory katalogów, katalogi zbiory schematów, schematy zbiory obiektów
i tak dalej. Na każdym poziomie tej struktury wszystkie elementy muszą mieć unikatowe nazwy czy identyfikatory. Oznacza to, że każdy obiekt musi mieć nazwę. Gdy wydawane jest polecenie tworzące na serwerze obiekt, konieczne jest podanie dla tego nowego obiektu nazwy.
Literały
SQL uznaje za literał każdą wartość liczbowa, znakową, łańcuchową, czasową czy logiczną, która nie jest identyfikatorem. Bazy danych SQL pozwalają na używanie wielu rodzajów literałów. Literały mogą być używane w większości typów liczbowych, znakowych czy czasowych. Znakami języka SQL są: wielkie litry A-Z, małe litery a-z, cyfry 0-9 oraz zbiór znaków specjalnych SQL, składający się ze spacji i następujących dodatkowych znaków:
Tabela 2-1
Symbol |
Użycie |
+ |
Operator dodawania |
- |
Operator odejmowania lub wskaźnik zasięgu w więzach CHECK |
* |
Operator mnożenia |
/ |
Operator dzielenia |
= |
Operator równości |
<>!= |
Operator różności |
< |
Operator mniejszości |
> |
Operator większości |
<= |
Operator "mniejsze lub równe" |
>= |
Operator "większe lub równe" |
( |
Ogranicznik wyrażenia lub hierarchii |
) |
Ogranicznik wyrażenia lub hierarchii |
% |
Symbol wieloznaczny |
, |
Separator elementów list |
@ |
Oznaczenie zmiennej lokalnej |
@@ |
Oznaczenie zmiennej globalnej |
. |
Kwalifikator oddzielający |
' " " |
Oznaczenie łańcucha znakowego |
" " |
Oznaczenie identyfikatora ograniczonego |
-- |
Oznaczenie komentarza jednoliniowego |
/* |
Oznaczenie początku komentarza wieloliniowego |
*/ |
Oznaczenie końca komentarza wieloliniowego |
Źródło: Opracowanie własne
Słowa kluczowe
Słowa kluczowe to słowa, które mają przypisane jedno lub więcej znaczeń
w języku SQL. Niektóre słowa kluczowe są zastrzeżone (tzn. nie mogą być użyte jako zwyczajny identyfikator), a inne nie. Wszystkie słowa kluczowe
są przedstawione w załączniku 1.
Katalogi i schematy.
Katalog jest nazwaną kolekcją schematów SQL wewnątrz środowiska SQL, wartość których łącznie opisuje to, co może być poważnie traktowane jako baza danych. Katalogi są grupowane w klastry w sposób zależny od implementacji.
Standard nie dostarcza żadnego bezpośredniego mechanizmu do tworzenia
i usuwania katalogów. Katalogi są tworzone i usuwane w sposób zdefiniowany przez implementację.
Nazwa katalogu służy jako kwalifikator wysokiego poziomu do nazywania schematów, które są w nim zawarte. Jeśli jakieś odwołania do schematu pomijają nazwę katalogu, to domyślna nazwa katalogu jest przyjmowana w następujący sposób:
Jeżeli referencja (odwołanie) do schematu pojawia się wewnątrz klauzuli SCHEMA w definicji modułu;
Jeżeli odwołanie do schematu pojawia się w nazwie schematu w instrukcji CREATE SCHEMA, to jest przyjmowana nazwa katalogu skojarzona
z zawierającym go modułem;
Jeżeli odwołanie do schematu pojawia się w instrukcji CREATE SCHEMA ( innej niż powyżej), to bieżący schemat przyjmuje nazwę katalogu;
W pozostałych przypadkach jest przyjmowana nazwa katalogu skojarzona z modułem, który zawiera odwołanie do schematu.
Schemat jest nazwaną kolekcją deskryptorów. Każdy schemat zawiera deskryptory dla następujących typów obiektów:
Dziedzin (domen);
Tabeli bazowych;
Perspektyw;
Więzów;
Uprawnień;
Zbioru znaków;
Zestawień;
Translacji.
Podstawy funkcjonowania relacyjnych baz danych
Relacyjne bazy danych (jak również standard SQL) oparte są na kilku zasadach:
Wszystkie wartości danych oparte są na prostych typach danych;
Wszystkie dane w bazie relacyjnej przedstawiane są w formie dwuwymiarowych tabel. Każda tabela zawiera zero lub więcej wierszy
i jedną lub więcej kolumn. Na każdy wiersz składają się jednakowo ułożone kolumny wypełnione wartościami, które z kolei w każdym wierszy muszą być inne.
Po wprowadzeniu danych do bazy możliwe jest porównanie wartości
z różnych kolumn, zazwyczaj również z różnych tabel i scalanie wierszy,
gdy wychodzące z nich wartości są zgodne. Umożliwia to wiązanie danych
i wykonywanie stosunkowo złożonych operacji w granicach całej bazy danych;
Wszystkie operacje są wykonywane w oparciu o logikę, bez względu
na położenie wiersza w tabeli. Wiersze w relacyjnej bazie danych przechowywane są w dowolnym porządku.
Z braku identyfikacji wiersza przez jego pozycję pojawia się potrzeba obecności jednej lub więcej kolumn niepowtarzalnych w granicach całej tabeli, pozwalającej odnaleźć konkretny wiersz. Kolumny te określa się jako klucz podstawowy tabeli.
Jednym z mocnych punktów podejścia relacyjnego jest możliwość operowania danymi jako informacją i uniknięcie zagłębiania się w szczegóły reprezentacji
czy fizycznego przechowywania ich w bazie danych.
Projektowanie bazy danych
Istotną zaletą podejścia relacyjnego jest jego prostota. Wszystkie dane przechowywane w bazie i uzyskiwane z niej pojawiają się tylko w formie tabel.
Każda tabela ma jedną lub więcej kolumn, które jako grupa muszą posiadać odmienny zbiór wartości dla jednego wiersza. Wartość ta (lub grupa wartości), stanowi klucz podstawowy i służy do identyfikacji poszczególnych wierszy.
W tabeli może też występować kolumna lub grupa kolumn określających relację
z inną tabelą. Grupę tę określa się terminem klucz obcy , a związaną z nią grupę kolumn w innej tabeli - klucz nadrzędny. Klucz nadrzędny musi być niepowtarzalny, aby można było określić, do którego wiersza tabeli odwołuje się klucz obcy. Liczba i typ kolumn klucza obcego muszą być identyczne jak klucza nadrzędnego, choć mogą mieć one różne nazwy. Wartości klucza obcego nie musza być i z reguły nie są niepowtarzalne w tabeli, do której należą. Warunek ten dotyczy jedynie tabeli nadrzędnej. System zachowuje spójność odwołań, o ile wszystkie wartości klucza obcego odnaleźć można w odpowiednim kluczu nadrzędnym.
Instrukcje i elementy języka SQL oparte na ich funkcjach
Definiowanie i modyfikowanie obiektów
CREATE SCHEMA - Tworzy schemat
DROP SCHEMA - Usuwa schemat
CREATE TABLE - Tworzy tabelę
DECLARE LOCAL TEMPORARY TABLE - Tworzy tabelę tymczasową
ALTER TABLE - Zmienia definicję tabeli
DROP TABLE - Usuwa tebelę
CREATE DOMAIN - Tworzy domenę
ALTER DOMAIN - Zmienia definicję domeny
DROP DOMAIN - Usuwa domenę
CREATE CHARACTER SET - Definiuje niestandardowy zestaw znaków
DROP CHARACTER SET - Usuwa zestaw znaków
CREATE COLLATION - Definiuje porządek zestawiania
DROP COLLATION - Usuwa porządek zestawiania
CREATE TRANSLATION - Definiuje translację
DROP TRANSLATION - Usuwa translację
CREATE VIEW - Tworzy stałą tabelę pochodną
DROP VIEW - Usuwa tabelę pochodną
ALLOCATE CURSOR - Tworzy kursor dynamicznie
DEALLOCATE CURSOR - Tworzy kursor
Ograniczenia - Ograniczenie możliwości wprowadzania danych
Typy danych - Szczegółowy opis poszczególnych typów danych
Konstruktory wartości wierszy i tabel - Bezpośrednie określenia wierszy i tabel
Operowanie danymi
SELECT - Pobiera wiersze z tabeli
INSERT - Wstawia wiersze do tabeli
UPDATE - Zmienia wartości w tabeli
DELETE - Usuwa wiersze z tabeli
COMMIT WORK - Utrwala wprowadzone dane
ROLLBACK - Porzuca wprowadzone dane
OPEN - Przygotowuje kursor do użycia
FETCH - Pobiera wiersz z kursora
CLOSE - Opróżnia kursor
Wyrażenia CASE - Określają wartości warunkowe
Wyrażenia CAST - Zamieniają typy danych
Funkcje typu data/godzina - Zwracają bieżącą datę i godzinę
Funkcje liczbowe - Zwracają wartości liczbowe
Predykaty - Określają wyrafinowane kryteria wyboru danych dla operacji
Konstruktory wartości wierszy i tabel - Określają wiersze i tabele
Funkcje typu ciąg znaków i bitów - Zwracają ciągi bitów i znaków
Podzapytania - Zapytania użyte w innych instrukcjach
Ustawianie zabezpieczeń i ograniczeń danych
CREATE ASSERTION - Definiuje ogólną zasadę obowiązującą dane
DROP ASSERTION - Usuwa ogólną zasadę obowiązującą dane
SET CONSTRAINTS MODE - Określa moment sprawdzania ograniczeń
SET SESSION AUTHORIZATION - Określa bieżącego użytkownika sesji
SET TRANSACTION - Zabezpiecza przed lub zezwala na modyfikowanie danych
GRANT - Nadaje użytkownikom lub aplikacjom uprawnienia dotyczące obiektów
REVOKE - Odbiera uprawnienia dotyczące obiektów
Ograniczenia - Ograniczenie możliwości wprowadzania danych do tabel
Określenie parametrów sesji
CONNECT - Rozpoczyna sesję SQL
DISCONNECT - Kończy sesję SQL
SET CONSTRAINTS MODE - Określa moment sprawdzania ograniczeń
SET NAMES - Określa domyślnie domyślny zestaw znaków w instrukcjach SQL
SET SCHEMA - Określa schemat bieżący
SET SESSION AUTHORIZATION - Określa bieżącego użytkownika sesji
SET TIME ZONE - Określa bieżącą strefę czasową
SET TRANSACTION - Zabezpiecza przed zmianami w danych i danych lub zezwala na nie
ROZDZIAŁ II
Praktyczna część pracy dyplomowej składa się z dwóch segmentów.
Pierwszy z nich to słownik pojęć SQL, drugi - serwis dotyczący SQL'a,
który jest przykładem działania bazy danych opartej na MySQL.
Słownik sql
Słownik składa się dwóch części:
Pierwsza z nich to opis instrukcji SQL ułożone według alfabetu (zał. 2).
Druga to ten sam opis ułożony według kategorii (zał. 3).
Słownik SQL zawiera około 160 haseł. Jest on w całości napisany
w języku HTML. Składnia każdej strony wygląda w sposób następujący:
Główne informacje nagłówkowe o dokumencie:
Informacje na temat autora pracy:
<meta name="author" content="Beata Włodarczyk">;
Informacje o edytorze, w którym strona została napisana;
<meta name="generator" content="AceHTML 5 Pro">;
Standard kodowania polskich liter ISO-8859-2
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2">;
Styl powodujący nie podkreślanie linków:
<Style>A {text-decoration: none;}.</Style>
Treść dokumentu - śródtytuły, tekst, grafika, odsyłacze itp.
zmiana koloru paska przewijania:
{scrollbar-face-color: #dadada; scrollbar-darkshadow-color: #dadada; scrollbar-shadow-color: #dadada; scrollbar-highlight-color: #dadada; scrollbar-3dlight-color: #dadada; scrollbar-track-color: #ffffff; scrollbar-arrow-color: #ffffff; };
Wstawianie obiektów graficznych:
<img src="images/nazwa.gif" width="526" height="34" border="0" alt="">;
Wstawianie linków
<a href=”nazwa.html”>nazwa</a>
Pozostałe elementy to tekst opisujący instrukcję.
Każda instrukcja lub polecenie jest opisane na osobnej stronie. Większość stron opisujących polecenia składa się z pięciu modułów. Pierwszy z nich to nazwa polecenia. Stanowi on tytuł podstrony. Drugi moduł to ogólny opis danego polecenia. Kolejny określa składnię polecenia. Dla lepszej czytelności słowa kluczowe są pisane wielkimi literami. Następny moduł to objaśnienia do składni. Przykładowa strona słownika przedstawia załącznik 4.
Serwis sql
Serwis SQL od strony użytkownika jest podzielony na trzy działy oraz funkcję pozwalającą na szybkie wydrukowanie strony. Administrator serwisu posiada dodatkowe możliwości związane z usuwaniem czy modyfikacją wpisów do bazy.
Ta część pracy jest napisana w całości w języku PHP, gdyż umożliwia on stosowanie składni SQL. Język ten daje możliwość zamieszczania w jego treści części kodu HTML.
Aby w ogóle połączyć się z bazą danych użyta została instrukcja:
$kontakt = mysql_connect("$db_host", "$db_login", "$db_pass");
Jeśli host, login lub hasło nie będą się zgadzały z istniejącymi połączenie nie powiedzie się. Aby połączyć się z bazą danych, na której działa serwis zastosowana została instrukcja:
$connect = mysql_select_db("$db_name", $kontakt);
Aby wykonywać zapytanie do określonej bazy danych użyte zostało polecenie :
$result = mysql_query ("select * from faq ",$kontakt);
Często występujący fragment kodu w treści to:
while ($pole = mysql_fetch_array($result))
{………}
Funkcja while wywołuje wszystkie instrukcje zawarte w klamrach, bez określonej liczby powtórzeń. Kolejne powtórzenie pętli zależy od tego, czy warunek zawarty w nawiasach jest spełniony.
Jeśli chodzi o dostęp do danych, skorzystano z funkcji mysql_fetch_array.
Na podstawie przekazanego jej identyfikatora rezultatu zapytania $result zwraca
on aktualny wiersz (rekord) przesuwając jednocześnie wskaźnik do następnego rekordu. W ten sposób można odczytać wszystkie wiersze wchodzące w skład rezultatu zapytania.
Przykładowy kod strony jest przedstawiony w załączniku 5.
Użytkownik serwisu ma do dyspozycji trzy działy: NEWS, FAQ oraz KSIĘGA GOŚCI. Wszystkie wymienione części serwisu są oparte na bazie .
Część ADMIN, która jest przeznaczona dla administratora zawiera odnośniki
do wcześniej wspomnianych działów.
Jak wcześniej wspomniano, cały serwis jest oparty na bazie .
Do stworzenia tej bazy zostało użyte polecenie:
CREATE DATABASE WLODARCB;
Polecenie to spowodowało stworzenie bazy danych o nazwie WLODARCB.
Wszystkie dane konfiguracyjne dotyczące tej bazy są przechowywane
w zmiennej tablicowej inicjowanej w pliku o nazwie database.inc. Mają one
za zadanie połączyć się z określoną bazą danych. Przedstawiają się one następująco:
$db_host = "si.ae.krakow.pl";
$db_login = "wlodarcb";
$db_pass = "*****";
$db_name = "wlodarcb";
Zmienne te znaczą kolejno nazwę hosta, w którym znajduje się baza, login właściciela (administratora) serwisu, jego hasła oraz nazwy bazy serwisu.
News
W istniejącej już bazie zostały dodane tabele, których nazwy są takie same jak nazwy serwisów, dla których zostały stworzone. Pierwszą z nich jest tabela o nazwie News. Ma ona za zadanie przechowywanie danych, które są potrzebne do wyświetlenia
na stronie serwisu. Została ona stworzona przy pomocy polecenia:
CREATE TABLE NEWS(
id_news INT(10) DEFAULT '0' NOT NULL AUTO_INCREMENT,
nowosc TEXT NOT NULL,
PRIMARY KEY (id_news));
Przy tworzeniu tabeli News zostały również skonstruowane rekordy ID_NEWS oraz NOWOSC. ID_NEWS służy do przechowywania numeru nowości. Jest on więc typu liczbowego domyślnie ustawionego na zero. Ponieważ jest on przeznaczony do numerowania danych, ich kolejne numery nie mogą się powtarzać oraz nie mogą zostać puste. Dlatego jako atrybut tego pola został użyty AUTO_INCREMENT, czyli auto-numerowanie oraz NOT NULL, który uniemożliwia zostawienie pustego pola. Rekord NOWOSC służy do przechowywania treści newsa. Dlatego też ma on typ tekstowy. Podobnie jak ID_NEWS nie może pozostać on pusty, więc posiada atrybut NOT NULL. Jako klucz podstawowy, czyli PRIMARY KEY został wybrany rekord ID_NEWS, gdyż ma on unikalny numer, natomiast tekst nowości mógłby się powtarzać.
Aby wyświetlić na stronie wszystkie przechowywane wartości użyte zostało polecenie:
SELECT * FROM NEWS
Zostało ono umieszczone na stronie w dwóch tabelach. W jednej znajduje się numer nowości, natomiast w drugiej jej tekst. Na stronie wyświetlane są wszystkie nowości niezależnie od ich ilości w bazie.
W chwili, gdy użytkownik zna jakąś nowość, która nadawałaby się do opublikowania, może wejść na link, który otwiera formularz. Po wypełnieniu blankietu informacja jest wysyłana drogą e-mailową do administratora, który weryfikuje nowość oraz zamieszcza ją w serwisie.
Funkcje w serwisie news dostępne tylko dla administratora to usuwanie, dodawanie i modyfikacja nowości.
Usuwanie newsa jest potrzebne w przypadku pojawienia się błędnej
lub nie nadającej się do publicznego wyświetlenia na stronie newsa. Zwykły użytkownik nie ma dostępu do tej funkcji, gdyż mógłby on usunąć na przykład
dla żartów dobre informacje. Usuwanie nowości sprowadza się tylko do kliknięcia przycisku z napisem „usuń” oraz potwierdzeniem, że informacja ta została skasowana. Polecenie służące do usuwania wartości w tym polu przedstawia się w sposób następujący:
DELETE FROM news WHERE id_news='$id'
Wyrażenie to sprawia, że z tabeli news jest usuwana informacja, gdzie liczba porządkowa nowości jest przypisana numerowi podanemu przez administratora.
Przy każdej informacji znajduje się wyżej wymieniony guzik. W ten sposób każdy kolejny przycisk jest powiązany z numerem ID nowości. Dzięki temu możliwe jest usunięcie tylko jednej, wybranej informacji.
Kolejną czynnością dostępną dla admionistratora jest dodawanie nowości.
W przypadku, gdy jest on w posiadaniu nowej informacji może ją dołożyć do bazy klikając na odpowiedni przycisk dostępny na stronie. Wówczas zostaje wyświetlony formularz, do którego można wpisać nowość.
Od strony SQL wygląda to następująco:
INSERT INTO news VALUES (NULL , '$nowosc' )
Wyrażenie to odpowiada za wkładanie do tabeli News odpowiednich wartości, gdzie pierwsza z nich to numer dodawany do tabeli automatycznie,
natomiast w miejsce zmiennej $NOWOSC podawany jest tekst nowej informacji.
Modyfikacja newsa odbywa się w sposób podobny jak usuwanie, ale tylko
w przypadku wyboru informacji poprzez numer ID. Funkcja ta służy do poprawiania źle sformułowanych zdań czy poprawiania błędów ortograficznych.
Aby móc zmienić treść wiadomości trzeba najpierw ją wybrać spośród innych. Do tego służy polecenie:
SELECT * FROM news WHERE id_news = $id
Instrukcja ta wybiera wszystkie dane z tabeli news, które posiadają określony numer ID. Więc tak naprawdę wybierana jest tylko jedna informacja. Po wybraniu odpowiedniej nowości na ekranie pojawia się formularz z wpisanym tekstem nowości, który należy zmienić. Po poprawieniu błędów administrator może skasować wprowadzone przez niego zmiany wracając do oryginalnej wiadomości lub dodać zmienioną informację do bazy. W przypadku potwierdzenia zmiany uruchamiana jest instrukcja SQL:
UPDATE news SET nowosc = '$nowosc' WHERE id_news='$id'
Faq
Serwis Faq jest stworzony, aby użytkownik mógł odnaleźć odpowiedź na pytanie dotyczące SQL. W przypadku, gdy zagadnienie nie zostało jeszcze poruszone
w serwisie ma on możliwość dodania pytania.
Aby serwis Faq mógł działać została stworzona tabela poleceniem:
create table faq (
id_faq INT(10) DEFAULT '0' NOT NULL AUTO_INCREMENT,
pytanie TEXT NOT NULL,
odpowiedz TEXT,
PRIMARY KEY (id_faq));
Tabela składa się z trzech pól: ID_FAQ, PYTNIE i ODPOWIEDZ.
ID_FAQ służy do przechowywania numeru pytania. Jest on typu liczbowego domyślnie ustawionego na 0. Każde pytanie musi mieść przyporządkowany numer identyfikacyjny umożliwiający dodanie odpowiedzi do wybranego zagadnienia. Zarówno PYTANIE jak i ODPOWIDZ musza być typu tekstowego, gdyż zawierają one tekst, Jest to spowodowane tym, że tylko pytanie może pozostać bez odpowiedzi,
natomiast odwrotna sytuacja jest nie możliwa. Kluczem podstawowym tej tabeli jest ID_FAQ, gdyż jest on unikalną wartością.
Na stronie głównej serwisu Faq zostają wyświetlone wszystkie pytania ewentualnie z odpowiedziami. Dzieje się to dzięki poleceniu:
SELECT * FROM faq
Jak już wyżej wspomniano, użytkownik ma dostęp tylko do funkcji zadawania nowego pytania.
Przy dodawania nowej kwestii wyświetla się formularz, w którym można zadać pytanie. Po wypełnieniu formularza wprowadzony tekst można skasować wracając do pustego formularza lub dodać do bazy. Aby dołączyć pytanie zostaje wykonana instrukcja SQL:
INSERT INTO faq VALUES (NULL , '$pytanie' , '')
Do tabeli zostaje włożona nowa wartość z kolejnym numerem ID, z tekstem pytania oraz pustym polem przeznaczonym na odpowiedź.
Odpowiedzieć na pytanie w sposób bezpośredni może tylko administrator.
Jest to również związane z poprawnością dodawanych wpisów. W przeciwnym wypadku użytkownik mógłby zamieścić na stronie informacje błędne, niecenzuralne lub w inny sposób nie nadające się do pokazania ich publicznie.
Gdy administrator odpowiada na postawione pytanie, zostają wyświetlone dwa pola edycji: pole w którym znajduje się treść pytania oraz pole, w którym administrator może wpisać odpowiedź. Ta funkcją administrator może również zmienić drobne błędy zarówno w istniejącym pytaniu jak i w odpowiedzi.
Aby odpowiedzieć na konkretne pytanie, trzeba je wybrać z bazy. Służy do tego polecenie:
SELECT * FROM faq WHERE id_faq = $id
Po wybraniu odpowiedniego rekordu z tabeli, wyświetleniu go na ekranie monitora oraz wprowadzeniu zmian rozpoczyna czekanie na decyzje administratora
o zatwierdzeniu zmian. W przypadku odrzucenia zmian pola wracają
do wcześniejszego stanu. W przypadku zatwierdzenia zmiany uruchamiana zostaje instrukcja:
UPDATE faq SET pytanie='$pytanie' , odpowiedz='$odpowiedz' WHERE id_faq = $id
Polecenie to aktualizuje wpis w tabeli Faq, przy czym zmienia się tylko wpis
w polu o danym numerze ID.
Zmienna $PYTANIE oznacza tutaj treść zadanego pytania, która jest przechowywana w polu Pytanie, a $ODPOWIEDZ oznacza treść dodanej odpowiedzi zapisanej w rekordzie Odpowiedz.
Użytkownik może skorzystać z podobnej funkcji jak w przypadku dodawania nowego newsa. Odpowiedź może być wysłana do właściciela strony tylko za pomocą poczty elektronicznej.
Usuwanie z tabeli pytania działa na tej samej zasadzie jak usuwanie nowości
z tabeli News. Składnia polecenie wygląda następująco:
DELETE FROM faq WHERE id_faq='$id'
Księga gości
Księga gości jest umieszczona w serwisie, aby użytkownik - jeśli ma ochotę - mógł zaznaczyć, że odwiedził stronę, oraz mógł wyrazić swoją opinię na temat całego serwisu.
Wszystkie dane znajdujące się w serwisie KSIĘGA GOŚCI przechowywane są w tabeli KSIEGA, która powstała przy pomocy instrukcji:
Create table ksiega(
id_ksiega INT(10) DEFAULT '0' NOT NULL AUTO_INCREMENT,
autor VARCHAR(30) NOT NULL,
mail VARCHAR(30) NOT NULL,
www VARCHAR(60) NOT NULL,
komentarz TEXT NOT NULL,
data VARCHAR(10) NOT NULL,
PRIMARY KEY (id_ksiega))
Powstanie tabeli umożliwiło polecenie CREATE TABLE. Pole ID_KSIEGA oznacza numer ID kolejnego wpisu do księgi. Jest on numerowany automatycznie. Kolejny powstały rekord to AUTOR, który przechowuje dane dotyczące autora wpisu. W formularzu użytkownik może wpisać dowolną liczbę znaków, w bazie jednak są one przechowywane jako tekst o maksymalnej długości trzydziestu znaków. Świadczy o tym podany typ pola VARCHAR (30). Rekordy o nazwie MAIL i WWW działają na takiej samej zasadzie jak AUTOR. Przechowują one kolejno podany adres e-mailowy oraz adres strony internetowej wpisującego się. Pole WWW różni się od pozostałych tylko dozwoloną długością znaków, która jest dwa razy większa. Rekord KOMENTARZ jest typem tekstowym związanych z długością, gdyż opinia użytkownika może być bardzo długa. Pole DATA służy do przechowywania daty wpisu. Może ono zawierać maksymalnie dziesięć znaków (YYYY-MM-DD) . Kluczem podstawowym tej tabeli jest ID_KSIEGA.
Wszystkie wpisy zawarte w bazie danych są wyświetlane na stronie dzięki poleceniu:
SELECT * FROM ksiega
Oznacza to, że z tabeli KSIEGA zostały wybrane wszystkie rekordy. Dane wyświetlane są w tabeli. Dane z rekordu MAIL są wyświetlane jako link do adresu poczty elektronicznej, natomiast dane z rekordu WWW przedstawione są jako link do podanej strony.
Aby użytkownik mógł dodać wpis, musi kliknąć na przycisk z napisem „DODAJ WPIS”. Zostanie wtedy wyświetlony formularz. Wpisujący ma do wypełnienia pola: Autor, mail, www - gdzie dopisuje adres do istniejącego już początku: http:// - oraz komentarz. Data wpisu jest generowana automatycznie.
Dodawanie wpisu jest możliwe dzięki instrukcji:
INSERT INTO ksiega VALUES (NULL , '$autor' , '$mail', '$www', '$komentarz', '$data')
Do tabeli KSIEGA są wkładane po kolei wartości: numer ID wstawiany automatycznie, autor wpisu, adres autora, jego strona www, komentarz. Data, podobnie jak ID jest wstawiana automatycznie i nie jest ona pokazana w formularzu.
Po wypełnieniu formularza użytkownik może wysłać swoje dane na stronę lub skasować pozostawiając pusty formularz.
Usunąć wpisy z bazy danych może tylko administrator. Dzieje się to dzięki poleceniu:
DELETE FROM ksiega WHERE id_ksiega='$id'
Podobnie jak w przypadku tabeli NEWS i FAQ usuwane są wartości tylko z wybranego pola.
ZAKOŃCZENIE
Zdobywanie wiedzy o informatyce i językach programowania jest procesem ciągłym i zróżnicowanym. Nie można więc poprzestać na przeczytaniu kilku książek na ten temat, można jednak od tego zacząć. Poznawanie informatyki polega również na obserwacji rynku informatycznego i ocenie, pod względem kreatywnym i fachowym nowych informacji spotykanych na co dzień w internecie, telewizji, gazetach czy magazynach.
Praktyczna część pracy powstała z myślą o osobach interesujących się SQL'em. Istniejący słownik pozwala na znalezienie fachowego opisu instrukcji zrozumiałego zarówno dla osób znających ten język jak i dla początkujących.
Serwis umożliwia śledzenie nowości dotyczących przede wszystkim SQL'a oraz zadawanie pytań lub czytanie istniejących już odpowiedzi.
Teoretyczna część opisuje sposób, w jaki został stworzony serwis oraz słownik SQL. Praca została napisana językiem przyjaznym dla każdego czytającego. W miarę dokładnie opisuje ona wszystkie instrukcje zawarte w kodzie stron internetowych.
BIBLIOGRAFIA
C.J.Date i Hugh Darwen, (2000), „SQL Omówienie standardu języka”, Wydawnictwa Naukowo-Techniczne, Warszawa;
Martin Gruber, (2000), „SQL”, Wydawnictwo HELION, Gliwice;
Informacje zaczerpnięte z Internetu;
Przemyślenia własne;
SPIS TABEL I RYSUNKÓW
ZAŁĄCZNIKI
zał. 1 słowa kluczowe (zastrzeżone)
ABSOLUTE ACTION ADD ALL ALLOCATE ALTER AND ANY ARE AS ASC ASSERTION AT AUTHORIZATION AVG BEGIN BETWEEN BIT BIT_LENGTH BOTH BY CASCADE CASCADED CASE CAST CATALOG CHAR CHARACTER CHAR_LENGTH CHARACTER_LENGTH CHECK CLOSE COALESCE COLLATE COLLATION COLUMN COMMIT CONNECT CONNECTION CONSTRAINT CONSTRAINTS CONTINUE CONVERT CORRESPONDING COUNT CREATE CROSS CURRENT CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR DATE DAY DEALLOCATE DEC DECIMAL DECLARE DEFAULT DEFERRABLE DEFERRED DELETE DESC DESCRIBE DESCRIPTOR DIAGNOSTIC DISCONNECT DISTINCT DOMAIN DOUBLE DROP ELSE END END-EXEC ESCAPE EXCEPT EXCEPTION EXEC EXECUTE EXIST EXTERNAL EXTRACT FALSE FETCH FIRST FLOAT FOR FOREIGN FOUND FROM FULL GET GLOBAL GO GOTO GRANT GROUP HAVING HOUR IDENTITY IMMEDIATE IN INDICATOR INITIALLY INNER INPUT INSENSITIVE INSERT INT INTEGER INTERSECT INTERVAL INTO IS ISOLATION JOIN KEY LANGUAGE LAST LEADING LEFT LEVEL LIKE LOCAL LOWER MATCH MAX MIN MINUTE MODULE MONTH NAMES NATIONAL NATURAL NCHAR NEXT NO NOT NULL NULLIF NUMERIC OCTET_LENGTH OF ON ONLY OPEN OPTION OR ORDER OUTER OUTPUT OVERLAPS PAD PARTIAL POSITION PRECISION PREPARE PRESERVE PRIMARY PRIOR PRIVILEGES PROCEDURE PUBLIC READ REAL REFERENCES RELATIVE RESTRICT REVOKE RIGHT ROLLBACK ROWS SCHEMA SCROLL SECOND SECTION SELECT SESSION SESSION_USER SET SIZE SMALLINT SOME SPACE SQL SQLCODE SQLERROR SQLSTATE SUBSTRING SUM SYSTEM_USER TABLE TEMPORARY THEN TIME TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE TO TRAILING TRANSACTION TRANSLATE TRANSLATION TRIM TRUE UNION UNIQUE UNKNOWN UPDATE UPPER USAGE USER USING VALUE VALUES VARCHAR VARYING VIEW WHEN WHENEVER WHERE WITH WORK WRITE YEAR ZONE
Słowa kluczowe (nie zastrzeżone)
ADA C CATALOG_NAME CHARACTER_SET_CATALOG CHARACTER_SET_NAME CHARACTER_SET_SCHEMA CLASS_ORIGIN COBOL COLLATION_CATALOG COLLATION_NAME COLLATION_SCHEMA COLUMN_NAME COMMAND_FUNCTION COMMITTED CONDITION_NUMBER CONNECTION_NAME CONSTRAINT_CATALOG CONSTRAINT_NAME CONSTRAINT_SCHEMA CURSOR_NAME DATA DATETIME_INTERVAL_CODE DATETIME_INTERVAL_PRECISION DYNAMIC_FUNCTION FORTRAN LENGTH MESSAGE_LENGTH MESSAGE_OCTED_LENGTH MESSAGE_TEXT MORE MUMPS NAME NULLABLE NUMBER PASCAL PLI REPEATABLE RETURNED_LENGTH RETURNED_OCTED_LENGTH RETURNED_SQLSTATE ROW_COUNT SCALE SCHEMA_NAME SERIALIZABLE SERVER_NAME SUBCLASS_ORIGIN TABLE_NAME TYPE UNCOMMITTED UNNAMED
zał. 2 spis haseł według alfabetu
A
B
C
D
E
F
G
H
I
J
L
M
N
O
P
R
S
T
U
V
W
zał. 3 spis haseł według kategorii
Funkcje
Agregacji
Matematyczne
Znakowe
Inne
Instrukcje
Instrukcje sterujące
Klauzule
Operatory logiczne
Typy danych
Inne
zał. 4 przykładowa strona html
<HTML>
<HEAD>
<title>Praca Dyplomowa</title>
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="author" content="Beata Włodarczyk">
<meta name="generator" content="AceHTML 5 Pro">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
<style>
A {text-decoration: none;}
</style>
<style type="text/css">
BODY
{scrollbar-face-color: #dadada; scrollbar-darkshadow-color: #dadada; scrollbar-shadow-color: #dadada; scrollbar-highlight-color: #dadada; scrollbar-3dlight-color: #dadada; scrollbar-track-color: #ffffff; scrollbar-arrow-color: #ffffff; }
<body bgcolor="#ffffff" text="#7760d2" link="#7760d2" vlink="#7760d2" alink="#7760d2">
</style>
</head>
<body>
<div align="center"><font color="#7760d2"><b><font size="4">CREATE VIEW</font></b>
<br><br>
<img src="images/opis.gif" width="526" height="34" border="0" alt="">
<br><br>
Funkcja CREATE VIEW tworzy perspektywć , zwanć także jako wurtualna tabela.
Perspektywa działa jak zwykła tabela, ale jest zdefiniowana jak zapytanie. Składniki perspektywy może definiować prawie każde prawidłowe polecenie <i>
<a href = "select.html">SELECT</a></i>, zabronione zaś jest zazwyczaj stosowanie klauzuli <i><a href = "orderby.html"> ORDER BY</a></i>.
<br><br>
<img src="images/Skladnia.gif" width="519" height="34" border="0" alt="">
<br><br>
CREATE TABLE perspektywa<br>
[ ( przecinkowa_lista_kolumn ) ]<br>
AS wyrażenie_tabelowe <br>
[ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
<br><br>
<img src="images/Objasnienia.gif" width="519" height="34" border="0" alt="">
<br><br>
Tutaj "perspektywa” jest nazwą nowej perspektywy, przecinkowa_lista_kolumn (jeśli nie jest określona) podaje niekwalifikowane nazwy kolumn perspektywy, wyrażenie_tabelowe określa zakres perspektywy.
Klauzula WITH ... CHECK OPTION sprawia, że dla wszystkich operacji <i><a href="insert.html">INSERT</a></i>
i <i><a href="update.html">UPDATE </i></a> względem perspektywy będzie dokonywane sprawdzenie, czy rzeczywiście nowe wiersze wstawione lub zmodyfikowane spełniają warunek definiują czy perspektywę .
<br><br>
<img src="images/Przyklad.gif" width="519" height="34" border="0" alt="">
<br><br>
CREATE VIEW NienieskaPartia (NrProduktu. ProduktName, Waga, Miasto)<BR>
AS SELECT Dostawa.NrProduktu, Produkt.ProduktName, Produkt.Waga, Produkt.Miasto<br>
FROM Produkt<br>
WHERE Produkt = "niebieski"
</div>
</font>
</body>
</html>
zał. 5 przykładowa strona() php
<style>
A {text-decoration: none;}
</style>
<?
include("../config.inc");
$kontakt = mysql_connect("$db_host", "$db_login", "$db_pass");
$connect = mysql_select_db("$db_name", $kontakt);
?>
<a href="add_question.php"><img src="../image/dodpyt.gif" border="0" ></a>
<table border="0">
<td><b>Je_[ li znasz odpowied_z
na które_[ z poni_| szych pyta_D </b><br><a href="adres.php"><img src="../image/odp.gif" border="0" ></a>
</td></table>
<table border="1" align="center" bordercolor="#e8e8e8"summary="" width="97%" >
<?
$result = mysql_query ("SELECT * FROM faq ",$kontakt);
$i=0;
while ($pole=mysql_fetch_array($result))
{$i++;
print " <tr><td wigth='2%' bgcolor=\"e8e8e8\"><b> $i </b></td>";
print " <b><td></td></tr>";
print " <tr><td></td>";
print " <b><td bgcolor=\"e8e8e8\"><font color=\"DARKBLUE\">$pole[pytanie]</b></font></td></tr>";
print " <tr><td></td><td ><font color=\"gray\"><b>$pole[odpowiedz]</font></td></tr> <br>";
}
print "</table>";
?>
Zbiór procedur SQL wywołanych z innego programu. W SQL92 i późniejszym moduł posiadać może ID autoryzacji i uprawnienia. Katalog zawsze jest zawarty w jakimś module, jeżeli CREATE SCHEMA nie jest autonomiczne; wówczas nazwa katalogu jest definiowana przez implementację.
Katalog zawsze jest zawarty w jakimś module, jeżeli CREATE SCHEMA nie jest autonomiczne; wówczas nazwa katalogu jest definiowana przez implementację.
Deskryptor - zakodowany opis obiektu SQL który zawiera wszystkie informacje o obiekcie dostosowane do wymogów implementacji SQL.
1
SPIS TREŚCI
Szukasz gotowej pracy ?
To pewna droga do poważnych kłopotów.
Plagiat jest przestępstwem !
Nie ryzykuj ! Nie warto !
Powierz swoje sprawy profesjonalistom.
7
WSTĘP
38
ROZDZIAŁ I
68
ZAKOŃCZENIE
70
BIBLIOGRAFIA
71
SPIS TABEL I RYSUNKÓW
101
ZAŁĄCZNIKI