Zarządzanie systemami informatycznymi Zarządzanie internetową bazą danych MySQL
Bazy danych Koncepcja bazy danych Relacyjna baza danych Projektowanie internetowej bazy danych
Koncepcja bazy danych Bazą danych nazywamy zbiór danych w postaci tabel oraz narzędzi stosowanych do gromadzenia, przekształcania oraz wyszukiwania danych. Tabelą w bazie danych nazywamy zbiór rekordów opisujących obiekty np. pracownicy zawierających informacje o tych obiektach w sposób ujednolicony. Rekord zwany także krotką lub wierszem, to pozioma struktura danych opisująca jeden obiekt. Rekord składa się z pól opisujących dokładnie cechy obiektu np. pojedynczego pracownika. Pole zwane także atrybutem lub kolumną, to struktura danych opisująca pojedynczą daną w rekordzie np. nazwisko pracownika. Klucz podstawowy (ang. primary key) zwany też kluczem głównym to jedno lub więcej pól, których wartość jednoznacznie identyfikuje każdy rekord w tabeli. Taka cecha klucza nazywana jest unikatowością. Klucz podstawowy służy do powiązania rekordów w jednej tabeli z rekordami z innej tabeli. Klucz podstawowy jest nazywany kluczem obcym, jeśli odwołuje się do innej tabeli. Na przykład, w bazie pracowników kluczem podstawowym może być numer ewidencyjny pracownika.
Relacyjna baza danych Relacja Po podzieleniu danych na tabele i zdefiniowaniu pól kluczy podstawowych trzeba wprowadzić do systemu bazy danych informacje na temat sposobu poprawnego łączenia powiązanych danych w logiczną całość. W tym celu definiuje się relacje między tabelami. Typy relacji 1. relacja jeden-do-jednego W relacji jeden-do-jednego każdy rekord w tabeli A może mieć tylko jeden dopasowany rekord z tabeli B, i tak samo każdy rekord w tabeli B może mieć tylko jeden dopasowany rekord z tabeli A. Ten typ relacji spotyka się rzadko, ponieważ większość informacji powiązanych w ten sposób byłoby zawartych w jednej tabeli. Relacji jeden-do-jednego można używać do podziału tabeli z wieloma polami, do odizolowania części tabeli ze względów bezpieczeństwa, albo do przechowania informacji odnoszącej się tylko do podzbioru tabeli głównej. 2. Relacja jeden-do-wielu Relacja jeden-do-wielu jest najbardziej powszechnym typem relacji. W relacji jeden-do-wielu rekord w tabeli A może mieć wiele dopasowanych do niego rekordów z tabeli B, ale rekord w tabeli B ma tylko jeden dopasowany rekord w tabeli A.
Relacje 3. Relacja wiele-do-wielu W relacji wiele-do-wielu, rekord w tabeli A może mieć wiele dopasowanych do niego rekordów z tabeli B i tak samo rekord w tabeli B może mieć wiele dopasowanych do niego rekordów z tabeli A. Jest to możliwe tylko przez zdefiniowanie trzeciej tabeli (nazywanej tabelą łącza), której klucz podstawowy składa się z dwóch pól kluczy obcych z tabel A i B. Relacja wiele-do-wielu jest w istocie dwiema relacjami jedendo-wielu z trzecią tabelą. Na przykład, tabele "Zamówienia" i "Produkty" są powiązane relacją wiele-do-wielu zdefiniowaną przez utworzenie dwóch relacji jedendo-wielu z tabelą "Pozycje zamówione".
Przykład relacji
Projektowanie internetowej bazy danych Baza danych powinna określać model obiektów świata realnego (np. klienci, zamówienia, książki) Unikać przechowywania redundantnych danych Marnotrawstwo pamięci Możliwość powstania anaomalii uaktualniania Zapisywać atomowe wartości kolumn Dobrać właściwe klucze, które zagwarantują unikalność rekordów Unikać tworzenia tabel z wieloma pustymi polami
Architektura internetowej bazy danych 1 2 3 Przegladarka Serwer WWW Interpreter PHP Serwer MySQL 6 5 4
Stosowanie MySQL Uruchamianie bazy danych MySQL Definiowanie użytkowników i nadawanie przywilejów Usuwanie przywilejów Tworzenie tabel Wstawianie danych Wyszukiwanie danych Zmiany struktury i zawartości tabel
Uruchomienie bazy MySQL Połącznie z bazą danych MySQL mysql -h nazwa_komputera -u identyfikator_uzytkonika p np: > mysql -h localhost -u root -p tworzenie bazy danych: > create database nazwa_bazy; pokazanie utworzonych baz danych: > show databases; przejscie do bazy: >use nazwa_bazy;
Poziomy przywilejów Polecenia GRANT i REVOKE służą do nadawania i odbierania użytkownikom MySQL praw na czterech poziomach uprzywilejowania: globalny baza danych tabela kolumna
Definiowanie użytkowników GRANT przywileje [kolumny] ON obiekt TO identyfikator_uzytkownika [ IDENTYFIED BY 'haslo'] [REQUIRE opcje_ssl] [WITH [GRANT OPTION ograniczenia] Utworzenie użytkownika mającego status administratora: mysql> grant all -> on * -> to robert identified by 'haslo' -> with grant option; Utworzenie użytkownika bez przywilejów mysql>grant usage -> on moja_baza. * -> to student identified by 'mnb123 ;
Modyfikowanie przywilejów mysql> grant select, insert, update, delete, alter, drop ->on moja_baza.* ->to student Usunięcie części przywilejów: mysql> revoke alter, drop ->on moja_baza.* ->from student
Typy przywilejów Typy przywilejów: Nadawane zwykłym użytkownikom SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER, CREATE, DROP Przywileje dla administratorów FILE, LOCK TABLES, PROCESS, RELOAD, SHOW DATABASES, SHUTDOWN, SUPER Przywileje specjalne ALL PRIVILEGES, USAGE
Usuwanie przywilejów REVOKE przywileje ON obiekt FROM identyfikator_uzytkownika usuwanie użytkownika - with grant option mysql>revoke all privileges, grant ->from student; usuwanie części przywilejów: mysql> revoke alter, create, drop ->on my_db.* ->from student;
Tworzenie tabel bazy danych CREATE TABLE nazwa_tabeli(kolumny) np: create table klienci ( klientid int unsigned not null auto_increment primary key, ); nazwisko char(50) not null, adres char(100) not null, miejscowosc char(30) not null Aby pokazać utworzone tabele: mysql> show tables; Aby pokazać zawartość tabeli: mysql> describe klienci;
Typy danych w MySQL Liczby całkowite: TINYINIT, SMALLINIT, MEDIUMINIT, INTEGER, BIGINIT Liczby zminnoprzecinkowe: FLOAT, DOUBLE (REAL), DECIMAL Data i czas: DATE, TIME, DATETIME, TIMESTAMP, YEAR Łańcuchy znaków: CHAR(M), VARCHAR(M) Dane binarne: TEXT, BLOB
Wstawianie danych INSERT [INTO] nazwa_tabeli [ (kolumna1, kolumna2,..)] VALUES(wartosc1, wartosc2,...) np: insert into klienci values (3, 'Julia Kowalska', 'Wierzbowa 25', 'Warszawa'), (4, 'Adam Pawlak', 'Szeroka 1/47', 'Szczecin'), (5, 'Michalina Nowak', 'Zachodnia 357', 'Gliwice');
Wyszukiwanie danych SELECT [opcje] kolumna [INTO plik] FROM nazwy_tabel [WHERE warunek] [GROUP BY rodzaj_grupowania] [HAVING wartosc_funkcji] [ORDER BY porzadek_sortownia] [LIMIT limit] [PROCEDURE nazwa_procedury(argumenty)];
Wyszukiwanie danych
Typy połączeń tabel w MySQL Kartezjański - wszystkie możliwe kombinacje połączeń wierszy łączonych tabel przez użycie przecinków oddzielających nazwy tabel, bez klauzuli WHERE Full join jak wyżej Cross join jak wyżej z klauzulą CROSS JOIN między nazwami tabel Inner join równoważne przecinkowi między nazwami tabel stosowane z WHERE (bez klauzuli WHERE staje się Full join) Equi-join stosowane z warunkiem zawierającym znak równości w celu wyszukania pasujących do siebie wierszy z różnych tabel, w SQL odpowiada mu klauzula WHERE Left join używane w celu wyszukiwania brakujących wartości
Wyszukiwanie w wielu tabelach Łączenie dwóch tabel Łączenie trzech tabel
Szeregowanie danych w określonym porządku ORDER BY
Agregowanie i grupowanie danych Funkcje agregujące: avg(kolumna)- wartość średnia count(kolumna) ilość wartości niezerowych min(kolumna) - najmniejsza w kolumnie max(kolumna) - największa w kolumnie std(kolumna) - odchylenie standardowe sum(kolumna) suma wartości w kolumnie
Zmiany rekordów UPDATE nazwa_tabeli SET kolumna1=wyrażenie1, kolumna2=wyrażenie2 [WHERE warunek] [ORDER BY kryteria_porzadkowania] [LIMIT ilosc] np.: update klienci set adres='olkuska 250' where klientid=4;
Zmiany struktury tabel ALTER TABLE nazwa_tabeli zmiana [, zmiana,...] np. alter table zamowienia add podatek float(6.2) after wartosc; <-dodanie kolumny alter table zamowienia drop podatek; <-usuwanie kolumny alter table klienci modify nazwisko char(70) not null; <-zmiana typu kolumny
Usuwanie elementów bazy danych Usuwanie rekordów: DELETE FROM tabela [WHERE warunek] [ORDER BY kolumny_sortowania] [LIMIT ilosc] np. delete from klienci where klientid=5; Usuwanie tabel: drop table nazwa_tabeli; Usuwanie całej bazy danych: drop database baza_danych;
Administracja i funkcje zaawansowane MySQL System przywilejów Ochrona bazy danych Tworzenie kopii zapasowych bazy danych Ładowanie danych do tabeli z pliku Maszyny zapisu Transakcje Klucze obce Procedury składowane
System przywilejów Systemowa baza danych mysql przechowuje w tabelach informacje o przywilejach wszystkich użytkowników zarejestrowanych do bazy i zmiany wywołane poleceniem GRANT Tabela user - globalne przywileje użytkowników Tabele db i host - przywileje dostępu do poszczególnych baz danych Tabele tables_priv i columns_priv przywileje nadane na wskazane tabele i kolumny Aby odświeżyć zmienione przywileje należy przeładować bazę danych: flush privleges; z poziomu systemu: mysqladmin flush-privileges mysqladmin reload
Ochrona bazy danych Nadawanie wszystkim użytkownikom haseł i odpowiednie ich ukrywanie Ustawianie przywilejów użytkowników na jak najbardziej ograniczone, tylko na ich potrzeby. Wszystkie dane pochodzące od użytkownika powinny podlegać weryfikacji. W przypadku przesyłania danych poufnych należy zastosować protokół SSL.
Tworzenie kopii zapasowej bazy danych MySQL mysqldump opt all -databases >wszystkie.sql zapisanie w pliku zrzutu wszystkie.sql wszystkich poleceń SQL niezbędnych do zrekonstruowania bazy danych. mysqlhotcopy database /sciezka/do/kopii
LOAD DATA INFILE LOAD DATA INFILE noweksiazki.txt INTO TABLE ksiazki; Instrukcja pozwala na odczytanie danych z pliku noweksiazki.txt i zapisanie ich w tabeli ksiazki. Pola danych w pliku muszą być rozdzielone znakiem tabulacji, dane umieszczone w apostrofach, a każdy wiersz musi być zakończony znakiem nowego wiersza(\n).
MySQL Maszyny zapisu Maszyna zapisu określa typ i sposób przechowywania tabeli: MyISAM typ domyślny o indeksowo-sekwencyjnej metodzie dostępu, który jest standardową metodą zapisu plików i rekordów. Nie obsługuje transakcji i kluczy obcych. ISAM typ jak powyżej, obecnie uznany za przestarzały MEMORY zapisywanie tymczasowych tabel w pamięci (do pracy na danych tymczasowych) MERGE cechy MyISAM, omija systemowe ograniczenie wielkości pliku BDB tabele obsługujące transakcje (Berkeley DB) InnoDB tabele obsługujące transakcje i klucze obce, działające szybciej od tabel BDB, w przypadku stosowania maszyny zapisu obsługującej transakcje jest to zalecany typ tabel. Zmiana typu tabeli: alter table zamowienia type=innodb;
Transakcje Transakcje to mechanizm pomagający w utrzymaniu spójności danych, szczególnie w przypadku wystąpienia błędu bądź załamania serwera. Transakcją jest zapytanie lub seria zapytań, dla których zagwarantowane jest, że zostaną wykonane w całości, lub też w całości niewykonane. Transakcje muszą spełniać normy ACID: atomowość transakcja musi być wykonana w całości lub nie wykonana wogóle spójność transakcja powinna pozostawić spójną bazę danych izolacja operacja do zakończenia transakcji powinna być odizolowana od bazy trwałość po zapisaniu w bazie danych transakcja powinna być trwała
Uruchamianie transakcji w InnoDB Wyłączenie domyślnego, automatycznego zatwierdzania dla sesji: set autocommit=0; Jeżeli automatyczne zatwierdzanie jest włączone, każdą transakcję należy zaczynać instrukcją: start transaction; Aby zatwierdzić instrukcje składające się na transakcję nalaży wpisać: commit; Czynność można cofnąć przed wydaniem commit poleceniem : rollback;
Klucze obce np. Mechanizm kluczy obcych dostępny jest w tabelach typu MyISAM i InnoDB Klucze obce mogą być traktowane tak samo jak klucze główne i będą wymagały podawania właściwych wartości zgodnych z numeracją tego klucza Tabele typu InnoDB wprzeciwieństwie do MyISAM kontrolują integralność kluczy obcych. >alter table pozycje_zamowione add foreign key (zamowienieid) references zamowienia(zamowienieid); Kolumna zamowienieid staje się kluczem obcym na podstawie klucza głownego tabeli zamowienia w kolumnie o tej samej nazwie.
Klucze obce Przykład nadania klucza obcego dla pola zamowieniaid i próba wpisania wartości do tego pola. W przypadku tabeli InnoDB takie działanie jest niedozwolone, w przeciwieństwie do MyISAM.
Procedury składowane Procedura składowana jest podprogramem utworzonym i zapisanym w MySQL. #Przykład prostej procedury skladowanej delimiter// create procedure suma_zamowien(out suma float) BEGIN select sum(wartosc) into suma from zamowienia; END // delimiter; #Uruchomienie procedury call suma_zamowienia(@t);
Funkcje składowane #Przykładowa funkcja delimiter // create function dodaj_podatek(cena float) returns float return cena*1.22; // delimiter ; #uruchomienie funkcji select dodaj_podatek(100);
Interfejs
Łączenie z bazą danych MySQL mysqli_connect(servername,username,password,dbname); new mysqli (servername,username,password,dbname); $con = mysqli_connect("localhost","peter","abc123, mydb ); lub $con = new mysqli ("localhost","peter","abc123, mydb ); if (!$con) { die( Nie mogę nawiązać połączenia. ); }
Pobieranie danych z bazy danych Wybór bazy danych: mysqli_selcet_db($db, nazwa_bazy); $db ->select_db(nazwa_bazy); Wysłanie zapytania: $wynik = mysqli_query($db, $zapytanie); $wynik=$db->query($zapytanie);
Odczytanie rezultatu zapytania Wersja proceduralna: $wiersz = mysqli_fetch_assoc($wynik); //tablica asocjacyjna $wiersz = mysqli_fetch_row($wynik); //tablica numeryczna $wiersz = mysqli_fetch_array($wynik); //obie tablice Wersja obiektowa: $wiersz = $wynik->fetch_assoc(); $wiersz = $wynik->fetch_row(); $wiersz = $wynik->fetch_array();
Zamykanie połączenia z bazą danych mysqli_free_result($wynik); $wynik -> free(); mysqli_close($db); $db->close();
Przykład- Pobieranie danych z bazy
Wpisywanie danych do bazy