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 tworzenie indeksów, połączeń pomiędzy tabelami zależności w bazie danych DQL (Data Query Language) Wykonywanie zapytań 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, laura@gdzieindziej.pl 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 Tylko najbardziej konieczne Dotyczące konkretnych poleceń SQL Nie wpływające na poziom bezpieczeństwa bazy danych Administratorów 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 SHUTDOWN PROCESS FILE Pozwala na powtórne załadowanie tabel zawierających metadane Umożliwia zakończenie pracy serwera MySQL Pozwala na śledzenie procesów wykonywanych przez serwer i ich przerywanie Pozwala na wczytywanie danych z plików do tabel i odwrotnie Przywileje specjalne Przywilej Opis ALL USAGE Nadaje wszystkie przywileje z poprzednich tabel 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