1 SQL – Structured Query Language (1)Wykład 3 Prowadzący: dr Paweł Drozda
2 Zadania SQL definiowanie danych definiowanie perspektywprzetwarzanie danych (interaktywne i programowe) definiowanie reguł integralności danych autoryzacja określanie początku transakcji, potwierdzenie i wycofywanie transakcji dr P. Drozda
3 Grupy instrukcji Język definicji danych (DDL): CREATE, ALTER, DROPJęzyk manipulowania danymi (DML): SELECT, INSERT, UPDATE i DELETE Instrukcje Sterowania Danymi: GRANT i REVOKE dr P. Drozda
4 Data Definition Language (DDL)Tworzenie tabel, baz danych, itd. CREATE Modyfikacja schematu bazy danych – ALTER Usuwanie tabel, baz danych itd. - DROP dr P. Drozda
5 Polecenie CREATE Tworzenie bazy danych CREATE database nazwa_bazy;Przykład: CREATE database restauracja; Tworzenie tabeli CREATE table nazwa(pole1 typ_danych1 ograniczenia1, pole2 typ_danych2 ograniczenia2, …, poleN typ_danychN ograniczeniaN, ograniczeniaOgólne); dr P. Drozda
6 Typy Danych (1) Znakowe CHAR(n), CHARACTER(n) – tekst o stałej ilości znaków VARCHAR(n), CHARACTER VARYING(n) – tekst o zmiennej ilości znaków – max n BINARY(n), VARBINARY(n) –odpowiedniki CHAR i VARCHAR tyle, że używają postaci binarnej do zapisu ciągu znaków TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT – pozwalają wprowadzić dłuższy tekst TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB – pozwalają przechowywać duży binarny obiekt dr P. Drozda
7 Typy Danych (2) Znakowe ENUM(‘war1’, ‘war2’,’war3’,…,’warN’) – typ wyliczeniowy określa dokładnie zbiór możliwych wartości SET(‘war1’, ‘war2’,’war3’,…,’warN’) – zbiór możliwych wartości – można wybrać więcej niż jedną Przykład deklaracji relacji: CREATE table Osoby(Nazwisko Varchar(20), Rasa Enum(‘Biała’, ‘Czarna’,’Żółta’), opis MediumText); dr P. Drozda
8 Typy Danych (3) Liczbowe CałkowiteLiczba bajtów min liczba max liczba TINYINT 1 -27/0 27-1/28-1 SMALLINT 2 -215/0 215-1/216-1 MEDIUMINT 3 -223/0 223-1/224-1 INT 4 -231/0 231-1/232-1 BIGINT 8 -263/0 263-1/264-1 Liczbowe Całkowite Ograniczenia nakładane na liczby całkowite ZEROFILL – wstawia zera w niewykorzystane pola UNSIGNED – dozwolone liczby nieujemne AUTO_INCREMENT – przy wstawieniu 0 lub null automatycznie wstawiana kolejna liczba dr P. Drozda
9 Typy Danych (4) Przykład: Id_prac Nazwisko ZarobkiCREATE table Pracownicy(id_prac Smallint(3) zerofill auto_increment, Nazwisko Char(20), Zarobki Mediumint unsigned); PRACOWNICY Id_prac Nazwisko Zarobki dr P. Drozda
10 Typy Danych (5) Liczbowe ZmiennoprzecinkoweFLOAT(D,M) – typ pojedynczej precyzji (4 bajty), D - liczba wyświetlanych cyfr M - ilość wyświetlanych cyfr po przecinku DOUBLE(D,M), REAL(D,M) – typ podwójnej precyzji (8 bajtów) D, M – jw. NUMERIC(D,M), DECIMAL(D,M) – dokładna precyzja, gdzie D – ilość cyfr znaczących, M – ilość cyfr znaczących po przecinku dr P. Drozda
11 Typy danych (6) Typy daty i czasu Formaty dla Timestamp Typ FormatDATE RRRR-MM-DD. TIME GG:MM:SS. DATETIME RRRR-MM-DD GG:MM:SS TIMESTAMP[(M)] W zależności od M YEAR[(2|4)] RR lub RRRR Podany typ Format wyświetlania TIMESTAMP RRRRMMDDGGMMSS TIMESTAMP(14) TIMESTAMP(12) RRMMDDGGMMSS TIMESTAMP(10) RRMMDDGGMM TIMESTAMP(8) RRRRMMDD TIMESTAMP(6) RRMMDD TIMESTAMP(4) RRMM TIMESTAMP(2) RR dr P. Drozda
12 Typy danych (7) PrzykładCREATE table Osoby(id_osoby Smallint auto_increment, Nazwisko Varchar(23), data_ur Date, czas_maratonu Time, rok_rozp YEAR(4), zarobki Decimal(7,2)) dr P. Drozda
13 Ograniczenia(1) NOT NULL – wymusza wpisanie wartości dla danego polaUNIQUE – wartości w danym polu nie mogą się powtarzać CHECK (warunek) – nakłada warunek na relację DEFAULT wartość – domyślnie wartość Przykład CREATE table Pracownicy(id_prac Smallint(3) zerofill auto_increment, Nazwisko Varchar(25) Unique, zarobki Decimal(7,2) Default 1500, Check(zarobki>0)) dr P. Drozda
14 Ograniczenia(2) PRIMARY KEY – definicja klucza głównego; może być definiowany przy polu które jest kluczem, bądź na koniec relacji – gdy więcej pól niż jedno FOREIGN KEY (nazwa_pola) REFERENCES nazwa_tabeli(nazwa_pola1) – klucz obcy dr P. Drozda
15 Ograniczenia(3) Przykład definicji kluczy1) CREATE table Pracownicy(id_prac Smallint(3) auto_increment, Nazwisko Varchar(25) Unique, zarobki Decimal(7,2), PRIMARY KEY(id_prac)); 2) CREATE table Projekty(nr_projektu Smallint Primary Key, nazwa char(20), kierownik Smallint, Foreign key(kierownik) References Pracownicy(id_prac)); dr P. Drozda
16 Ograniczenia(4) Wymuszanie więzi integralnościusuwanie a) FOREIGN KEY(pole1) REFERENCES tabela(pole2) ON DELETE SET NULL b) FOREIGN KEY(pole1) REFERENCES tabela(pole2) ON DELETE CASCADE c) FOREIGN KEY(pole1) REFERENCES tabela(pole2) ON DELETE SET DEFAULT d) FOREIGN KEY(pole1) REFERENCES tabela(pole2) ON DELETE RESTRICT dr P. Drozda
17 Ograniczenia(5) Uwaga do MySQL 5.0 – engine = INNODB PrzykładModyfikacja – analogicznie (zamiast ON DELETE – ON UPDATE) Uwaga do MySQL 5.0 – engine = INNODB Przykład 1) CREATE table Pracownicy(id_prac Smallint(3) auto_increment PRIMARY KEY, Nazwisko Varchar(25) Unique, zarobki Decimal(7,2)); 2) CREATE table Projekty(nr_projektu Smallint Primary Key, nazwa char(20), kierownik Smallint, Foreign key(kierownik) References Pracownicy(id_prac) ON DELETE CASCADE ON UPDATE SET DEFAULT) engine= INNODB; dr P. Drozda
18 Silniki składowania danychMyISAM – domyślny silnik Przechowywana na dysku w trzech plikach Format tabeli – rozszerzenie .frm Dane – rozszerzenie .myd Indeks – rozszerzenie .myi Tworzenie tabeli MyISAM CREATE TABLE t (i INT) ENGINE/TYPE = MYISAM; Zapewnia możliwość jednoczesnego wstawiania danych Możliwość indeksowania kolumn typu TEXT i BLOB Dopuszczalny null dla indeksowanych kolumn Używane indeksy typu B-drzewo dr P. Drozda
19 MyISAM engine Trzy typy składowania danych Statyczny Dynamicznymoże być użyty gdy nie ma kolumn typu TEXT, BLOB ma ustaloną z góry liczbę bajtów na każdy wiersz danych Bardzo szybki dostęp do danych Łatwe w rekonstrukcji po awarii Przykład CREATE TABLE t(int i) ENGINE = MyISAM, ROW_FORMAT=FIXED; Dynamiczny Wielkość pól dynamiczna Zajmuje mniej miejsca od tabel statycznych Trudne do rekonstrukcji po awarii Przykład: CREATE TABLE t(int i) ENGINE = MyISAM, ROW_FORMAT=DYNAMIC; Spakowany – za pomocą komendy myisampack dr P. Drozda
20 InnoDB engine Pozwala na wywołanie transakcjiZapewnia referencyjne więzi integralności Długi czas przetwarzania tabel Przykład: CREATE TABLE t(int i) ENGINE = InnoDB; dr P. Drozda
21 Modyfikacja schematu relacjiALTER TABLE – dodawanie, usuwanie atrybutów oraz ograniczeń integralnościowych, modyfikacja definicji atrybutu Przykład: ALTER TABLE Pracownicy ADD Primary Key(Id_prac); dr P. Drozda
22 ALTER TABLE - dodawanieDodawanie kolumny ALTER TABLE nazwa_tabeli ADD COLUMN pole typ_pola; Przykład: ALTER TABLE Pracownicy ADD COLUMN stanowisko VARCHAR(20) AFTER NAZWISKO; Dodawanie ograniczenia ALTER TABLE nazwa ADD CONSTRAINT nazwa i rodzaj ograniczenia (PRIMARY KEY, FOREIGN KEY, CHECK, itd.) dr P. Drozda
23 ALTER TABLE - usuwanie Usuwanie kolumny Usuwanie ograniczeniaALTER TABLE nazwa DROP COLUMN pole Usuwanie ograniczenia ALTER TABLE nazwa DROP CONSTRAINT nazwa_ograniczenia; Przykład ALTER TABLE Pracownicy DROP CONSTRAINT Klucz; dr P. Drozda
24 ALTER TABLE - modyfikowanieTylko do atrybutów ALTER TABLE nazwa MODIFY pole typ ograniczenia; Przykład ALTER TABLE Pracownicy MODIFY Nazwisko Char(30) not null; Zmiana nazwy i typu atrybutu ALTER TABLE nazwa CHANGE starepole nowepole typ ograniczenia dr P. Drozda
25 ALTER TABLE - modyfikacjaSilnika ALTER TABLE t ENGINE = InnoDB; Wartość pola auto_increment ALTER TABLE t AUTO_INCREMENT = value; dr P. Drozda
26 Usuwanie, kontrola integralnościUsunięcie tabeli DROP TABLE nazwa_tabeli; Usunięcie bazy danych DROP DATABASE nazwa_bazy; Stosowanie ograniczeń - klucze ALTER TABLE nazwa ENABLE KEYS; Wyłączanie ograniczeń - klucze ALTER TABLE nazwa DISABLE KEYS; dr P. Drozda
27 Zmiana nazwy RENAME TABLE tabela TO tabela1; PrzykładRENAME TABLE Pracownicy TO naukowcy; dr P. Drozda