MS SQL Język definiowania danych (DDL): ćwiczenia Dzięki DDL (Data Definition Language) można operować na strukturach, w których dane są przechowywane czyli np. dodawać, zmieniać i kasować tabele lub bazy. Najważniejsze polecenia tej grupy to: CREATE (np. CREATE TABLE, CREATE DATABASE,...) utworzenie struktury (bazy, tabeli, indeksu itp.), DROP (np. DROP TABLE, DROP DATABASE,...) usunięcie struktury, ALTER (np. ALTER TABLE ADD COLUMN...) zmiana struktury (dodanie kolumny do tabeli, zmiana typu danych w kolumnie tabeli). Jeśli chcemy zmodyfikować istniejącą tabele należy użyć polecenia ALTER TABLE nazwa ALTER TABLE t_test add dzial nvarchar(50) --dodaje kolumne ALTER TABLE t_test drop column dzial --usuwa kolumne ALTER TABLE t_test modify palaca int modyfikacja Modyfikacja definicji kolumny Do modyfikowania definicji kolumny służy klauzula MODIFY: ALTER TABLE nazwa MODIFY nazwa_kolumny typ (rozmiar) [NULL NOT NULL],... Zmiana nazwy tabeli Nazwę tabeli zmieniamy poleceniem RENAME TABLE: RENAME TABLE stara_nazwa TO nowa_nazwa; Utworzenie bazy danych ksiegarnia_internetowa str. 1 1. Wpisać CREATE DATABASE ksiegarnia_internetowa; i kliknąć Wykonaj, przy czym zastosujemy bardziej rozbudowane polecenie 2. CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;, które zagwaranuje nam poprawne wyświetlanie polskich liter. Tworzenie przykładowej tabeli mysql: CREATE TABLE klienci (
klient_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nazwisko CHAR(50) NOT NULL, adres CHAR(100) NOT NULL, miejscowosc CHAR(30) NOT NULL Ćwiczenia: Przykład na mysql -- Struktura tabeli dla tabeli `dostawcy` -- CREATE TABLE `dostawcy` ( `id_dostwcy` int NOT NULL AUTO_INCREMENT PRIMARY KEY, `nazwa_firmy` varchar(100), `kontakt_osoba` varchar(100), `miasto` varchar(100), `kraj` varchar(100), `telefon` varchar(12) COLLATE, `www` varchar(100), `adres` varchar(150) -- -- Zrzut danych tabeli `dostawcy` -- INSERT INTO `dostawcy` (`id_dostwcy`, `nazwa_firmy`, `kontakt_osoba`, `miasto`, `kraj`, `telefon`, `www`, `adres`) VALUES (1, 'Kamis', 'Tomasz Grzes', 'Rzeszów', 'Polska', '123123456', 'www.gres.pl', 'Zielona 8'), (2, 'Kotus', 'Marek Rudy', 'Warszawa', 'Pska', '789454', 'www.ikrje.pl', 'Kosynierów 4'), (3, 'Krakusek', 'Olgierd Jarosz', 'Przeworsk', 'Polska', '56876456', 'www.krakusek.com', 'Krokusowa 4/5' MS SQL Manipulowanie danymi (DML): ćwiczenia DML (Data Manipulation Language) służy do wykonywania operacji na danych do ich umieszczania w bazie, kasowania, przeglądania oraz dokonywania zmian. Najważniejsze polecenia z tego zbioru to: INSERT umieszczenie danych w bazie, UPDATE zmiana danych, DELETE usunięcie danych z bazy. Dane tekstowe muszą być zawsze ujęte w znaki pojedynczego cudzysłowu ('). --aktualizacja 1 UPDATE rezerwacje SET status='n' WHERE status='a'; str. 2
--aktualizacja 2 UPDATE ksiazki SET cena=cena*1.05; --usunięcie rekordu DELETE FROM rezerwacje WHERE nr_rezerwacji=14 --wstawianie rekordu: insert into osoby Values ('Jan','Kowalski','123123123','blabla' MS SQL Operatory i funkcje daty, godziny. Funkcje my SQL Funkcje MS SQL select CURDATE( select getdate( Zwraca datę bieżącą MS SQL Kontrola uprawnień (DCL): ćwiczenia DCL (Data Control Language) ma zastosowanie do nadawania uprawnień do obiektów bazodanowych. Najważniejsze polecenia w tej grupie to: GRANT służące do nadawania uprawnień do pojedynczych obiektów lub globalnie konkretnemu użytkownikowi (np. GRANT ALL PRIVILEGES ON EMPLOYEE TO PIOTR WITH GRANT OPTION przyznanie wszystkich praw do tabeli EMPLOYEE użytkownikowi PIOTR z opcją pozwalającą mu nadawać prawa do tej tabeli). REVOKE służące do odbierania wskazanych uprawnień konkretnemu użytkownikowi (np. REVOKE ALL PRIVILEGES ON EMPLOYEE FROM PIOTR odebranie użytkownikowi wszystkich praw do tabeli EMPLOYEE). DENY służące do zabraniania wykonywania operacji Polecenie GRANT - rejestrowanie nowego użytkownika Polecenie GRANT służy do tworzenia nowych użytkowników i nadawania im uprawnień. Posiada następującą składnię: GRANT przywileje [kolumny] str. 3
ON obiekt TO identyfikator_uzytkownika [IDENTIFIED BY 'haslo'] [REQUIRE opcje_ssl] [WITH [GRANT OPTION ograniczenia]]; Parametr obiekt wskazuje bazę lub tabelę, do której zastosowane zostaną podane uprawnienia. Jeżeli chcemy nadać dane uprawnienia we wszystkich bazach, to parametr obiekt powinien przyjąć wartość *.*. Wtedy dane uprawnienia nadajemy na poziomie globalnym. Jeżeli nie jest używana żadna baza danych, to stosujemy wartość *. Najczęściej, wskazuje się konkretną bazę oraz: wszystkie tabele w bazie - nazwa_bazy.*, dana tabela w bazie - nazwa_bazy.nazwa_tabeli, pojedyncze kolumny w danej tabeli - nazwa_bazy.nazwa_tabeli oraz nadanie odpowiedniej wartości parametrowi kolumny. Polecenie REVOKE - odbieranie użytkownikowi uprawnień Polecenie REVOKE służy do odbierania użytkownikom określonych uprawnień. Posiada następującą składnię: REVOKE przywileje [kolumny] ON obiekt FROM indentyfikator_uzytkownika; Rejestrowanie użytkownika mającego status administratora GRANT ALL ON * TO uczen_admin IDENTIFIED BY 'uczen_admin_123'; W wyniku tego polecenia, zostanie zarejestrowany użytkownik o nazwie uczen_admin, zostanie zapisane jego hasło uczen_admin_123 oraz zostaną mu nadane wszystkie uprawnienia w zakresie wszystkich istniejących baz danych. Usuwanie użytkownika z systemu DELETE FROM user WHERE USER='uczen_admin'; Zarejestrowanie nowego użytkownika bez uprawnień. Otwórz bazę ksiegarnia_internetowa i zastosuj następujące polecenie SQL: GRANT USAGE ON ksiegarnia_internetowa.* TO klient IDENTIFIED BY 'klient123'; Nadanie uprawnień zarejestrowanemu użytkownikowi klient. GRANT SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER, CREATE, DROP ON ksiegarnia_internetowa.* TO klient; str. 4
Teraz, nie ma już potrzeby podawania hasła użytkownika klient. Lista uprawnień znajduje się po słowie kluczowym GRANT. Będą one obowiązywać we wszystkich tabelach bazy ksiegarnia_internetowa. Ograniczenie uprawnień użytkownika klient. Administrator, może zawsze ograniczyć uprawnienia użytkowników. Wykonaj to, stosując następujące polecenie: REVOKE ALTER, CREATE, DROP ON ksiegarnia_internetowa.* FROM klient; Odebranie użytkownikowi klient wszystkich uprawnień. W tym celu zastosuj następujący kod SQL: REVOKE ALL ON ksiegarnia_internetowa.* FROM klient; Przykłady: 1. Utworzenie kona dyrektor o haśle haslo: CREATE USER 'DYREKTOR'@'localhost' IDENTIFIED BY 'haslo'; 2.Nadaje wszystkie uprawienia użytkownikowi GRANT ALL ON nazwa_bazy TO uzytkownik IDENTIFIED BY 'haslo'; 3. nadaje uprawnienia do wyboru i usuwania na bazie i na konkretnej tabeli GRANT SELECT, DELETE ON nazwa_bazy.nazwa_tabeli TO 'uzytkownik'@'localhost'; MS SQL Język definiowania zapytań (DQL): ćwiczenia DQL (Data Query Language) to język formułowania zapytań do bazy danych. W zakres tego języka wchodzi jedno polecenie SELECT. Często SELECT traktuje się jako część języka DML, ale to podejście nie wydaje się właściwe, ponieważ DML z definicji służy do manipulowania danymi ich tworzenia, usuwania i uaktualniania. Na pograniczu obu języków znajduje się polecenie SELECT INTO, które dodatkowo modyfikuje (przepisuje, tworzy) dane. Przykłady: Wyświetl wszystkie pola z tabelo t_dane: SELECT * FROM t_dane; Jeśli chcemy wybrać jakieś konkretne kolumny z tabeli podajemy ich nazwy: SELECT kolumna1,kolumna2, kolumna3 FROM t_dane str. 5
Jeśli chcemy posortować wynik zapytania: SELECT kolumna1,kolumna2, kolumna3 FROM t_dane order by kolumna1 asc Powyższy kod powoduje posortowanie wyniku zapytania. W klauzuli order by możemy podać kilka komulmn możemy również posortować od najmniejsze zastępując ASC DESC. SELECT kolumna1,kolumna2, kolumna3 FROM t_dane order by kolumna1 asc, kolumna2 desc Kolejnym elementem SQL jest klauzula WHERE służąca do filtrowania wyniku zapytania: Przedstawia operatory klauzuli Where:!= różne od > większe >= większe równe < mniejsze =< mniejsze równe like jak wyrażenie not like różne od wyrażenia in równe dla kilku wartości = równe SELECT place, osoba, dzial FROM t_dane WHERE place > 3500 and dzial = 'IT' Powyższe zapytanie wygeneruje nam z bazy danych zestawienie osobó zarabiających więcej niż 3500 zł z działu IT. Słowo and oznacza iloczyn logiczny, czyli oba warunki muszą być spełnione. OPERATORY LOGICZNE AND iloczyn logiczny OR suma logiczna NOT przeczenie str. 6
OPERATORY SPECJALNE BETWEEN przedział obustronnie zamknięty IN lista parametrów LIKE podobieństwa ANY, SOME, ALL lista z operatorami Przykład użycia operatorów SELECT place, osoba, dzial, kierownik FROM t_dane WHERE place between 3500 and 6000 and dzial like '%T' and kierownik in ('Nowak','Kowalski') W wyrażeniu arytmetycznym mogą występować nazwy kolumn, stałe wartości liczbowe oraz operatory arytmetyczne: + dodawanie - odejmowanie * mnożenie / dzielenie Przykład SELECT dochod, dochod*0.22 FROM t_dane; Aliasy kolumn Domyślne nagłówki kolumn możemy zastąpić innymi nazwami, które będą bardziej intuicyjne. Alias podaje się bezpośrednio po nazwie kolumny, której nazwę chcemy zmienić. Spacje w aliasie nie są dopuszczane, można natomiast utworzyć alias ze spacją biorąc całość w nawiasy kwdratowe lub podwójne apostrofy. Alias można poprzedzić AS opcjonalnie. Przykład SELECT name NAZWISKO, doch*0.22 podatek FROM t_dane; Operator konkatenacji Operator konkatenacji (+) pozwala na łączenie kolumny z kolumną lub wyrażeniem arytmetycznym lub wartością stałą. SELECT (IMIE+ +NAZWISKO) as dane FROM t_dane; str. 7
Eliminowanie duplikatów. Celem eliminacji duplikatów używamy polecenia DISTINCT za SELECT Przykład SELECT Distinct imie FROM uczen; Funkcje grupujące. Count(), Min(), Max(), Sum(), Avg(). Klauzula GROUP BY. Klauzula Having. Grupowanie w języku sql odbywa się za pośrednictwem klauzuli GROUP BY. SELECT sum(placa), dzial FROM t_dane group by dzial Funkcja sum w tym przypadku sumuje pensje pracowników po dziale. Pamiętać należy, że w sql w klauzuli GROUP BY musi się znajdować kolumna(kolumny) po których następuje agregacja. Sum - suma AVG - średnia MAX, MIN - maximum i minimum VARIANCE - warincja STDDEV - odchylenie standardowe count - zlicz Należy pamiętać że funkcja count(*) zlicza wszystkie wartości łącznie z NULL UWAGA: NULL i "0" to nie to samo, więc 0+null = null Na liście wyboru klauzuli SELECT mogą występować tylko i wyłącznie nazwy kolumn, które są przedmiotem działania klauzuli GROUP BY, chyba, że występują one jako argument funkcji grupującej. W przypadku zapytań agregujących w sql możliwe jest również filtrowanie słóży do tego HAVING SELECT sum(placa), dzial FROM t_dane group by dzial HAVING sum(placa) > 12000 Kolejność str. 8
Wymagany porządek klauzul jest następujący: 1. SELECT lista wyrażeń 2. FROM tabela 3. WHERE warunek selekcji wierszy 4. GRUOP BY warunek sortowania 5. HAVING warunek selekcji grup 6. ORDER BY wyrażenia Podaj 1 maksymalną cenę zamówionego produktu dla każdego zamówienia. Posortuj wg maksymalnej ceny produktu W MS SQL DZIAŁA TOP 1 select top 1 max(unitprice)as maksymalna, OrderID from [Order Details] group by OrderID order by maksymalna desc; W mysql działa LIMIT 1 select max(unitprice)as maksymalna, OrderID from [Order Details] group by OrderID order by maksymalna desc LIMIT 1; Złączenia tabel: /* zlaczenia wewnętrzne - inner join złączenia zewnętrzne- left outer join i right outer join ( można pominąć slowo outer) Left join - lewostronne zlaczenie zewnętrzne, ktore zwraca wszystkie wiersze po lewej stronie klauzuli JOIN, zaś z tabeli po prawej stronie tylko wiersze dla ktorych warunek zlączenia jest prawdziwy. W przypadku kiedy wiersz z lewej tabeli nie mam odpowiadającego mu wiersza z prawej tabeli to odpowiednie pola zostają wypelnione wartością NULL. RIGHT JOIN -prawostronne zlaczenie zewnętrzne funkcjonuje w analogiczny sposób jak LEFT JOIN */ --. WYŚWIETL NAZWĘ KLIENTA, który nigdy nie dokonał zamówienia select c.companyname from Customers as c left join Orders as o on o.customerid=c.customerid str. 9
where o.customerid is null Więzy integralności. Indeksy. Więzy integralność to system reguł gwarantujących, że relacje między wierszami w tabelach pokrewnych są prawidłowe, a użytkownik nie może przypadkowo usunąć lub zmienić danych pokrewnych. Więzy integralność zestaw, gdy spełnione są wszystkie następujące warunki: Odpowiedniej kolumna tabela podstawowa jest klucz podstawowy lub ma ograniczenie unique. Powiązane kolumny tabela obca mają ten sam typ danych i rozmiar. Gdy wymuszane więzy integralność narzucają następujące reguły: Nie można wprowadzić wartość kolumna klucz obcego tabela powiązanej relacją, jeśli ta wartość nie istnieje w klucz podstawowy w tabela pokrewnej. Można jednak wprowadzić wartość null kolumna klucz obcego. Na przykład nie można wskazać, czy zadanie jest przypisany do pracownika, który nie jest uwzględniony w employee tabela, ale można wskazać, że pracownik nie ma przypisanego stanowiska, wprowadzając wartość null w job_id kolumna employee tabela. Nie można usunąć wiersza z klucz podstawowy tabela, jeśli istnieją odpowiadające mu wiersze w tabela pokrewnej. Na przykład nie można usunąć wiersza z jobs tabela w przypadku pracowników przypisanych do zadanie reprezentowanego przez ten wiersz w employee tabela. Nie można zmienić klucz podstawowy wartość w klucz podstawowy tabela, jeśli ten wiersz zawiera powiązane wiersze. Na przykład, nie można zmienić wiersz job_id wartość w jobs tabela, w przypadku pracowników, job_id w employee tabela. Więzy spójności (więzy integralności, ang. constraints) 1 Więzy spójności danych (ang. Constraints) to zespół reguł, które gwarantują logiczną spójność danych wprowadzanych i przechowywanych w bazie. Zadaniem więzów spójności jest zagwarantowanie tego, aby dane w bazie danych wiernie odzwierciedlały świat rzeczywisty, dla opisu którego baza danych została zaprojektowana. Więzy spójności definiowane są na etapie projektowania bazy danych, tworzone wraz z innymi obiektami, przy tworzeniu bazy. Za ich realizację (przestrzeganie zdefiniowanych przez nie reguł) odpowiada system bazy danych. System bazy danych musi zagwarantować, że więzy spójności pozostaną prawdziwe przy wszystkich operacjach wykonywanych na bazie danych w postaci transakcji, akcji wyzwalaczy, ładowania danych do bazy danych czy ich importu. 1 https://edux.pjwstk.edu.pl/mat/118/lec/w8.html str. 10
Więzy spójności encji. Więzami spójności encji nazywamy reguły, pozwalające zdefiniować ograniczenia dla wartości dopuszczalnych w wierszu tabeli: Więzy klucza głównego PRIMARY KEY Więzy klucza głównego definiowane są na jednej, lub kilku kolumnach. Wartości w tych kolumnach jednoznacznie identyfikują wiersz, czyli muszą być unikalne. W kolumnach klucza głównego nie jest dopuszczalna wartość NULL. Na kolumnach tworzących klucz główny automatycznie jest zakładany indeks. Dla jednej tabeli tworzony jest tylko jeden klucz główny. Definiowanie: PRIMARY KEY Więzy klucza jednoznacznego UNIQUE Tak jak więzy klucza głównego, wartości w określonych kolumnach jednoznacznie identyfikują wiersz, czyli muszą być unikalne. W kolumnach klucza jednoznacznego jest dopuszczalna wartość NULL. Na kolumnach tworzących klucz jednoznaczny automatycznie jest zakładany indeks. Dla jednej tabeli można utworzyć więcej niż jeden klucz jednoznaczny. W przypadku tych więzów w MS SQL Server istnieje pewien problem. W kolumnie (kolumnach) klucza jednoznacznego UNIQUE dopuszczalna jest wartość NULL, ale niedopuszczalne jest jej powtarzanie (!). Definiowanie: UNIQUE Więzy NOT NULL W kolumnie, dla której zdefiniowane są więzy NOT NULL, nie dopuszcza się wystąpienia wartości NULL. Więzy tego typu nie powinny być deklarowane na kolumnie klucza obcego związków rekurencyjnych. Definiowanie: NOT NULL Więzy CHECK Więzy CHECK pozwalają zdefiniować warunek, który ma być spełniony dla wszystkich wierszy w tabeli. Definiowanie: CHECK (warunek ) Więzy DEFAULT Więzy DEFAULT stanowią definicję wartości domyślnej dla kolumny. W przypadku pominięcia w instrukcji INSERT wartości dla kolumny, na której zdefiniowano więzy DEFAULT, zostanie w niej umieszczona wartość domyślna. Definiowanie: DEFAULT wartość domyślna str. 11
Więzy spójności referencyjnej. Więzy spójności referencyjnej pozwalają zdefiniować zależności pomiędzy wartościami zapisanymi w kolumnach wiążących tabele w układzie klucz_główny klucz_obcy. Wymuszają one następujące zależności: Zbiór wartości w kolumnach klucza obcego jest zawsze podzbiorem zbioru wartości odpowiadającego mu klucza głównego. Wartością klucza obcego może być NULL (o ile na kolumnie klucza obcego nie zdefiniowano więzów NOT NULL). W tym przypadku klucz obcy nie wskazuje na żaden obiekt. System zapewnia, aby obiekt wskazywany przez wartość klucza obcego zawsze istniał, przy wszystkich możliwych operacjach na tabelach, w których biorą udział klucze główne i obce. Definiowanie: FOREIGN KEY REFERENCES nazwa_tabeli_nadrzędnej Przykład Napisz instrukcję tworzącą tabelę EMP. CREATE TABLE EMP ( Empno INT PRIMARY KEY, Ename VARCHAR(10) NOT NULL, Job VARCHAR(9), Mgr INT REFERENCES EMP, Hiredate DATETIME, Sal NUMERIC(7,2), Comm NUMERIC(7,2), Deptno INT NOT NULL REFERENCES DEPT, CONSTRAINT Chk_Emp_1 CHECK (Comm < Sal) Generowanie jednoznacznych numerów wierszy w MS SQL Server. Rozwiązaniem jest wykorzystanie właściwości IDENTITY kolumny tabeli, z zadeklarowanym typem danych Integer. Przykład Napisz instrukcję tworzącą tabelę OSOBA {IdOsoba, Imie, Nazwisko}. Zapewnij automatyczną generację unikalnej wartości klucza głównego (MS SQL Server). CREATE TABLE OSOBA ( IdOsoba INT IDENTITY PRIMARY KEY, Imie VARCHAR(20), Nazwisko VARCHAR(50) str. 12
Definiowanie więzów referencyjnych (kluczy obcych) Jeśli klucz obcy w tabeli A odwołuje się do klucza głównego w tabeli B, a klucz obcy w tabeli B odwołuje się do klucza głównego w tabeli A, to mamy do czynienia z cyklicznymi więzami referencyjnymi. W takim przypadku wykonujemy instrukcje CREATE TABLE, nie definiując kluczy obcych. Następnie za pomocą instrukcji ALTER TABLE wprowadzamy więzy REFERENCES, odwołujące się do istniejących już tabel. Przykład Na kolumnie Deptno tabeli EMP utwórz więzy referencyjne, odwołujące się do tabeli DEPT. ALTER TABLE EMP ADD CONSTRAINT fk_emp_dept FOREIGN KEY (Deptno) REFERENCES Dept ON DELETE SET NULL; Definiowanie wartości domyślnej. Jak już wcześniej wspomniano, dla kolumny może zostać zdefiniowana wartość domyślna, co pozwala pomijać ją przy wprowadzaniu danych do tabeli. ALTER TABLE Nazwa_tabeli ADD CONSTRAINT Nazwa_więzów_spójności DEFAULT Wartość FOR Nazwa_kolumny; W specyfikacji wartości domyślnej mogą występować wyrażenia, zawierające stałe i funkcje SQL, także funkcje User i Getdate (SQL Server) / Sysdate (ORACLE). Definiowanie więzów CHECK W przypadku warunku zdefiniowanego przez więzy CHECK, akceptowane są te wiersze, dla których ten warunek przyjmuje wartość TRUE lub NULL(!). System nie dopuszcza do pojawienia się wiersza, dla którego zdefiniowany warunek przyjmuje wartość FALSE (operacja kończona jest błędem). Przykład Do tabeli EMP dodaj więzy integralności CHECK gwarantujące, że sumaryczna kwota płacy (Sal) i prowizji (Comm) nie przekroczy wartości 10 000. ALTER TABLE EMP ADD CONSTRAINT Chk_sal_comm CHECK (Sal + Isnull(Comm, 0) < 10000 PRZYKŁADY NA INTEGRALNOŚĆREFERENCYJNĄ: CREATE TABLE PRACOWNIK (ID_PRACOWNIK INT IDENTITY PRIMARY KEY NOT NULL, str. 13
NAZWISKO VARCHAR(40) UNIQUE, ID_STANOWISKO INT CREATE TABLE STANOWISKA (ID INT IDENTITY PRIMARY KEY NOT NULL, NAZWA VARCHAR(40) UNIQUE, ALTER TABLE PRACOWNIK ADD FOREIGN KEY(ID_STANOWISKO) REFERENCES STANOWISKA (ID) ON UPDATE CASCADE ON DELETE CASCADE GO INSERT INTO PRACOWNIK(NAZWISKO,ID_STANOWISKO) VALUES ('KOWALSKI',1 INSERT INTO STANOWISKA (NAZWA) VALUES('PRACOWNIK BIUROWY' SELECT * FROM STANOWISKA; DELETE FROM STANOWISKA WHERE ID=1; SELECT * FROM PRACOWNIK; --INDEKSY /*PODSTAWOWA BUDOWA str. 14
CREATE INDEX NAZWA_INDEKSU ON TABELA (NAZWA_KOLUMNY*/ CREATE INDEX I_PRACOWNIK ON PRACOWNIK (NAZWISKO --USUNIECIE INDEKSU --DROP INDEX NAZWA_TABELI.NAZWA_INDEKSU DROP INDEX PRACOWNIK.I_PRACOWNIK /* INDEKS KLASTROWANY - przypomina ksiazke telefoniczna z ułożonymi alfabetycznie wpisami. Jego podstawowym zadaniem jest narzucenie tabelom, w jaki sposób mają zapisywać wiersze na kolejnych stronach CREATE UNIQUE CLUSTERED INDEX NAZAW_INDEKSU ON NAZWA_TABELI (KOLUMNA). INDEKS NIEKLASTROWANY- ZAPISANY JEST NA ZUPELNIE ODDZIELONYCH OD TABELI STRONACH. Można ją porównać do indeksu słów kluczowych, znajdujących się na kańcu każdej książki CREATE UNIQUE NONCLUSTERED INDEX NAZAW_INDEKSU ON NAZWA_TABELI (KOLUMNA). str. 15
Przykłady ćwiczenia na serwerze MS SQL CREATE DATABASE INTEGRALNOSC; ------------------------------ -- CHECK ---------------------------- --Tworzenie tabeli z ograniczeniami pól - CHECK(warunek) musi być spełniony, aby dodać nowy rekord CREATE TABLE Produkty ( ID int NOT NULL IDENTITY PRIMARY KEY, nazwa VARCHAR(50) NOT NULL, cena FLOAT(10) NOT NULL, CHECK (cena>1.0) --Tworzenie tabeli z ograniczeniami wraz z nazewnictwem ograniczenia przez CONSTRAINT nazwa, następnie 2 warunki w CHECK połączone AND CREATE TABLE Klienci ( ID int NOT NULL IDENTITY PRIMARY KEY, Nazwisko varchar(255) NOT NULL, Imie varchar(255), Wiek int, Miasto varchar(255), CONSTRAINT CK_KlienciWiek CHECK (Wiek>=18 AND Miasto='Rzeszów') --Dodanie ograniczenia do istniejącej już tabeli ALTER TABLE Produkty ADD CHECK (cena>1.0 --Dodanie ograniczenia do istniejącej tabeli z nazwą ograniczenia str. 16
ALTER TABLE Klienci ADD CONSTRAINT CK_KlienciWiek CHECK (Wiek>=18 AND Miasto='Rzeszów' --Usuwanie istniejącego ograniczenia ALTER TABLE Klienci DROP CONSTRAINT CK_KlienciWiek; ------------------------------ -- DEFAULT ------------------------------ --Tworzenie tabeli z wartością domyślną pola CREATE TABLE Produkty ( ID int NOT NULL IDENTITY(1,1) PRIMARY KEY, nazwa VARCHAR(50) NOT NULL, opis VARCHAR(255) DEFAULT 'Brak opisu', cena FLOAT(10) NOT NULL, CREATE TABLE Produkty ( ID int NOT NULL IDENTITY(1,1) PRIMARY KEY, nazwa VARCHAR(50) NOT NULL, opis VARCHAR(255), cena FLOAT(10) NOT NULL, --Wartością domyślną może być też funkcja matematyczna np. getdate() CREATE TABLE Zamowienia ( ID int NOT NULL IDENTITY(1,1) PRIMARY KEY, idproduktu INT, data_zamowienia DATETIME DEFAULT getdate() --Dodanie wartości domyślnej do istniejącej już tabeli (w niektórych systemach może nie działać ze str. 17
względu na konwersje danych) ALTER TABLE Zamowienia ADD CONSTRAINT CK_ZamowieniaDataZamowienia DEFAULT getdate() FOR data_zamowienia; --Usuwanie wartości domyślnej z istniejącej już tabeli ALTER TABLE Zamowienia DROP CONSTRAINT CK_ZamowieniaDataZamowienia; --Podczas tworzenia nie dało się nazwać ograniczenia więc żeby go usunąć znajdujemy nazwę dzięki poleceniu sq_help nazwa_tabeli --w moim wypadku nazwa tego ograniczenia to DF Zamowieni data 1920BF5C więc usuwamy go poprzednim poleceniem ALTER TABLE Zamowienia DROP CONSTRAINT DF Zamowieni data 1920BF5C; ------------------------------ UNIQUE ------------------------------ --Ograniczenie kolumny do posiadania tylko wartości unikalnych CREATE TABLE Produkty ( ID int NOT NULL IDENTITY(1,1) PRIMARY KEY, nazwa VARCHAR(50) NOT NULL UNIQUE, --Tutaj dodajemy UNIQUE opis VARCHAR(255) DEFAULT 'Brak opisu', cena FLOAT(10) NOT NULL, CREATE TABLE Produkty ( ID int NOT NULL IDENTITY(1,1) PRIMARY KEY, nazwa VARCHAR(50) NOT NULL, opis VARCHAR(255) DEFAULT 'Brak opisu', cena FLOAT(10) NOT NULL, UNIQUE(nazwa) --Tutaj dodajemy UNIQUE str. 18
--Można go też nazwać CREATE TABLE Produkty ( ID int NOT NULL IDENTITY(1,1) PRIMARY KEY, nazwa VARCHAR(50) NOT NULL, opis VARCHAR(255) DEFAULT 'Brak opisu', cena FLOAT(10) NOT NULL, CONSTRAINT ck_nazwa UNIQUE(nazwa) --Usuwanie tej wartości, jednakże jeśli zrobiliśmyt to 1 sposobem to trzeba znaleźć nazwę ograniczenia przez sq_help ALTER TABLE Produkty DROP CONSTRAINT ck_nazwa; ------------------------------ -- INDEKSY ------------------------------ --Tworzenie indeksu, gdzie duplikaty są dozwolone CREATE INDEX idx_nazwisko ON Klienci(nazwisko --Tworzenie indeksu, gdzie duplikaty są niedozwolone CREATE UNIQUE INDEX idx_nazwa ON Produkty(nazwa --Usuwanie indeksu DROP INDEX idx_nazwa ON Produkty; DROP INDEX Produkty.idx_nazwa; Stosowanie perspektyw (widoków). --widoki / perspektywa CREATE VIEW NAZWA_WIDOKU AS Select*.. -tworzenie widoku DROP VIEW NAZWA_WIDOKU -usunięcie wdoku str. 19
ALTER VIEW NAZWA_WIDOKU -modyfikacja widoku --1. Utwórz widok, który wyświetli ile jest klientów z danego kraju CREATE VIEW v_liczba_klientow AS SELECT kraj,count(klient_id) as liczba FROM klienci GROUP BY kraj; --2. MODYFIKACJA WIDOKU DODANIE DODATKOWO MIASTA ATER VIEW v_liczba_klientow AS SELECT kraj,miasto, count(klient_id) as liczba FROM klienci GROUP BY kraj, miasto; SELECT * FROM v_liczba_klientow ORDER BY liczba DESC /* POLECENIE ORDER BY - do sortowania nie można używać przy tworzeniu widoku. Natomiast stosuje się go na utworzonym widoku*/ --2. Usuń utworzony widok DROP VIEW v_liczba_klientow; Definicja transakcji i jej właściwości. Poziomy izolowania transakcji. Współbieżność. str. 20