Bazy danych Wykład IV SQL - wprowadzenie Copyrights by Arkadiusz Rzucidło 1 Czym jest SQL Język zapytań – deklaratywny dostęp do danych Składnia łatwa i naturalna Standardowe narzędzie dostępu do wielu różnych SZRBD { { { { { Dostęp do bazy danych Wyszukiwanie danych Wprowadzanie danych Usuwanie danych Modyfikacja danych Łatwy do nauki Copyrights by Arkadiusz Rzucidło 2 Części języka SQL DDL (Data Definition Language) { { Pozwala tworzyć, modyfikować i usuwać tabele w bazie danych Zawiera polecenia tworzenia struktury bazy danych DQL (Data Query Language) { Wykonywanie zapytań w bazie danych tworzenie indeksów, połączeń pomiędzy tabelami zależności w bazie danych Wyszukiwanie danych Porządkowanie danych DML (Data Manipulation Language) { Składnia związana z manipulowaniem danymi w bazie danych Dodawaniem nowych danych Modyfikowanie Usuwanie danych z tabel Copyrights by Arkadiusz Rzucidło 3 Tworzenie bazy danych Opracowanie struktury bazy danych Utworzenie tabel Rejestrowanie użytkowników Przykłady działania poleceń w języku SQL będą przedstawiane na przykładzie bazy danych MySQL Copyrights by Arkadiusz Rzucidło 4 Tworzenie bazy danych Składnia polecenia: { create database nazwa_bazy_danych Copyrights by Arkadiusz Rzucidło 5 Rejestrowanie użytkowników System MySQL może obsługiwać wielu użytkowników Użytkownik root { { Uprzywilejowany Tylko cele administracyjne Użytkowników posiadać konto w systemie { { { Nazwa Hasło Przywileje do bazy danych (obiektów bazy danych) Prawo do wykonywania określonego działania na wskazanym obiekcie Idea zbliżona do koncepcji praw dostępu do plików Zasada najmniejszego przywileju Copyrights by Arkadiusz Rzucidło 6 Rejestrowanie użytkowników Przydzielanie przywilejów – GRANT Odbieranie przywilejów – REVOKE Cztery poziomy uprzywilejowania: { { { { Globalny Baza danych Tabela Kolumna Copyrights by Arkadiusz Rzucidło 7 Polecenie GRANT Składania: GRANT przywileje [ kolumny] ON obiekt TO identyfikatro_użytkownika [IDENTIFIED BY ‘hasło’] [WITH GRANT OPTINS] Przywileje – postać listy przywilejów oddzielonych przecinkami Kolumny – wskazuje kolumny do jakich przywileje mają zastosowanie (pojedyncza nazwa kolumny lub lista oddzielona przecinkami) Obiekt – wskazuje bazę lub tabelę, do której zostaną zastosowane przywileje. ‘*.*’ lub ‘*’ określa wszystkie obiekty w systemie (przywilej na poziomie globalnym). Częstszy zapis to nazwa_bazy.* Identyfikator_użytkownika – identyfikator logowania się do systemu MySQL. Wartość może zawierać nazwę komputera np. laura@localhost, [email protected] Hasło – hasło dostępu do serwera. With grant option – wskazanie, że użytkownik będzie mógł nadawać równoważne sobie uprawnienia do obiektów, którymi administruje Copyrights by Arkadiusz Rzucidło 8 Typy i poziomy przewilejów Trzy typy przywilejów { Zwykłych użytkowników { Administratorów { Tylko najbardziej konieczne Dotyczące konkretnych poleceń SQL Nie wpływające na poziom bezpieczeństwa bazy danych Administrowanie bazą danych Specjalne Opcje dodatkowe Copyrights by Arkadiusz Rzucidło 9 Przywileje Przywileje użytkownika Przywilej Zastosowanie Opis SELECT Tabele, kolumny Pozwala na wyszukiwanie wierszy i rekordów z tabel INSERT Tabele, kolumny Pozwala na wstawienie nowych wierszy do tabel UPDATE Tabele, kolumny Pozwala na zmianę wartości wierszy zapisanych w tabelach DELETE Tabele Pozawala na usuwanie wierszy z tabel INDEX Tabele Pozwala na tworzenie i usuwanie indeksów w poszczególnych tabelach ALTER Tabele Pozwala na dokonywanie zmian w strukturze istniejących tabel: dodawanie, usuwanie kolumn, zmiana nazwy kolumn CREATE Baza danych, tabele Tworzenie nowych baz danych oraz tabel DROP Bazy danych, tabele Pozwala na usuwanie tabel oraz baz danych Copyrights by Arkadiusz Rzucidło 10 Przywileje Przywileje administratorskie Przywilej Opis RELOAD Pozwala na powtórne załadowanie tabel zawierających metadane SHUTDOWN Umożliwia zakończenie pracy serwera MySQL PROCESS Pozwala na śledzenie procesów wykonywanych przez serwer i ich przerywanie FILE Pozwala na wczytywanie danych z plików do tabel i odwrotnie Przywileje specjalne Przywilej Opis ALL Nadaje wszystkie przywileje z poprzednich tabel USAGE Nie nadaje żadnych przywilejów. Powoduje zarejestrowanie użytkownika i pozwala na na zalogowanie się do serwera. Pozostałe czynności nie są udostępniane. Copyrights by Arkadiusz Rzucidło 11 Przykłady Wszystkie przywileje do bazy danych dla Kasi z hasłem ‘acl123’. Kasia może nadawać prawa do bazy danych grant all on * to kasia identyfied by ‘acl123’ with grant option; Zabranie praw Kasi revoke all on * from kasia; Nadanie ograniczonych przywilejów do bazy danych książki Jurkowi grant select, insert, update, delete on ksiazki.* to jurek; Ograniczenie praw dostępu do bazy danych książki revoke alter, create,drop on ksiazki.* from Zosia Copyrights by Arkadiusz Rzucidło 12 Tworzenie tabel bazy danych Wskazanie bazy danych z której użytkownik chce korzystać Uzyskanie listy dostępnych baz danych: show batabases; Wybranie konkretnej bazy danych: use nazwa_bazy danych Przykład: mysql> use biblioteka; Tworzenie tabel CREATE TABLE nazwa_tabeli struktura_tabeli; Przykład: mysql> create table klienci (id_klienta int unsigned not null auto_increment primary key, imie varchar(15), nazwisko varchar(30), d_ur date); Query OK, 0 rows affected (0.01 sec) { Copyrights by Arkadiusz Rzucidło 13 Tworzenie tabel Sprawdzenie wykonania operacji tworzenia tabeli Wyświetlenie opisu tabeli Copyrights by Arkadiusz Rzucidło 14 Automatyczne tworzenie tabel Możliwość automatycznego tworzenia struktury bazy danych za pomocą skryptów Przykład: create table klienci (id_klienta int unsigned not null auto_increment promatry key, imie varchar(15), nazwisko varchar(30), d_ur date); create table ksiazki (id_ksiazki int unsigned not null auto_increment promatry key, tytul varchar(60) autor varchar(30), kategoria int); create table zdarzenia (id_zdarzenia int unsigned not null auto_increment promatry key, id_klietna int not null, id_ksiazki int not null, data_wyp date not null, data_odd date); create table kategoria (kategoria varchar(30) not null primary key); Zawartość skryptu „biblioteka.sql” uruchamia się za pomocą komendy mysql < biblioteka.sql Copyrights by Arkadiusz Rzucidło 15 Dodatkowe atrybuty kolumn Not null – oznacza, że pole musi posiadać wartość. Pominięcie oznacza zgodę na wartości puste w polu. Auto_increment - specjalny atrybut nadający wartości całkowitoliczbowe. Serwer nadaje automatycznie w kolumnie nowego wpisu wartość będącą maksymalną wartością w tej kolumnie powiększoną o 1. Kolumny takie muszą być indeksowane. Primary key – kolumna oznaczona tym atrybutem jest kluczem podstawowym tabeli a wartości zawarte w niej muszą być unikatowe Unsigned – tylko wartości nieujemne Default - określa wartość domyślną dla kolumny Copyrights by Arkadiusz Rzucidło 16 Typy kolumn Copyrights by Arkadiusz Rzucidło 17 Typy kolumn Copyrights by Arkadiusz Rzucidło 18 Wstawianie danych do tabeli Wypełnienie tabeli danymi może być realizowane: { { { Bezpośrednio – poleceniem SQL – z powłoki systemu Za pomocą zaprojektowanego interfejsu (np. strony WWW) Korzystając z dedykowanych interfejsów aplikacyjnych (Krasnal, WAMP) Składnia polecenia INSERT: INSERT [INTO] nazwa_tabeli [(kolumna1, kolumna2, ...)] VALUES (wartość1, wartość2, …); INSERT [INTO] nazwa_tabeli SET kolumna1=wartość1, kolumna2=wartość2, … ; Przykład: insert into klienci values ('','Jan','Kowalski','1975-12-10'); Copyrights by Arkadiusz Rzucidło 19 Automatyczne wypełnianie danymi use biblioteka; insert into ksiazki values (‘’,’A.Mickiewicz’,’Pan Tadeusz’,’1’), (‘’,’H.Sienkiewicz,’Potop’,’1’), (‘’,’L.Welling’,’PHP i MySQL’,’2’); Uruchomienie skryptu Mysql < wypelnienie.sql Copyrights by Arkadiusz Rzucidło 20 Modyfikacja danych w tabelach Składnia polecenia UPDATE: UPDATE nazwa_tabeli SET nazwa_pola='nowa_wartość'; Przykład: mysql> update ksiazki set kategoria=‘1’; { ustawienie dla wszystkich pozycji książkowych kategorii 1 mysql > update ksiazki set kategoria=2 where id_ksiazki=1; Copyrights by Arkadiusz Rzucidło 21 Copyrights by Arkadiusz Rzucidło 22 Koniec Źródła: • L.Welling, L.Thomson; „PHP i MySQL. Tworzenie stron WWW”, Helion 2002. • http://home.pl/support/ • J.D.Ullman, J.Widom; „Podstawowy Wykład z Systemów Baz Danych”, WNT 2003. Copyrights by Arkadiusz Rzucidło 23