PHP i bazy danych


Pierwsze kroki w MySQL

Nie można nauczyć się dobrze korzystać z dobrodziejstw MySQL nie znając podstaw. Po przeczytaniu tej lektury nauczysz się projektowania prostych tabel oraz używania niektórych bardzo istotnych wyrażeń - innymi słowy - zrobisz pierwsze kroki w MySQL...

Niniejszy tekst pisałem głównie w oparciu o program mysql. Jeżeli nie masz dostępu do tego programu również powinieneś przeczytać ten tekst do końca, ponieważ opisane polecenia przydadzą Ci się podczas używania np. języka PHP do obsługiwania baz MySQL.

Zaprojektowanie pierwszej tabeli

W kursie programowania zatytułowałbym ten paragraf jako "Pierwszy program" - wyświetla napis "Hello World!". Chodzi tutaj o pewien początek, aby zaznajomić użytkownika z podstawą danego języka programowania (podstawowa struktura programu). Podobnie w MySQL trzeba postawić takie "pierwsze kroki".

Zanim wykonasz instrukcję musisz posiadać bazę danych. Dla przypomnienia bazę danych tworzymy w następujący sposób:

CREATE DATABASE moja_baza;
USE moja_baza;

Polecenie CREATE DATABASE powoduje utworzenie nowej bazy danych o nazwie "moja_baza", następnie polecenie USE powoduje wybranie tej bazy danych (od teraz polecenia wykonywane będą w obrębie bazy "moja_baza").

Powyższa instrukcja zadziała w przypadku tekstowego monitora mysqld - mysql. W phpMyAdmin oba powyższe polecenia nie będą Ci potrzebne (większość rzeczy polega na klikaniu w linki). Polecam jednak używać poleceń tekstowych dla samego zapamiętania ich składni (przyda się podczas używania PHP).

Teraz utworzymy prostą tabelę z danymi o pewnych osobach. Wpisujemy:

CREATE TABLE uzytkownicy(
      uid MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
      imie VARCHAR(30) NOT NULL,
      nazwisko VARCHAR(30) NOT NULL,
      email VARCHAR(50) NOT NULL,
      data_dodania DATETIME NOT NULL,
      PRIMARY KEY (uid)
);

Powyższy układ można też zapisać w jednej linii - średnik informuje o końcu polecenia.

Za pomocą polecenia CREATE tworzymy tabelę uzytkownicy.

Następnie określamy kolumny i ich rodzaje, czyli np. kolumna "uid" typu MEDIUMINT, bez znaku - UNSIGNED (typ określa liczby z zakresu od -n do n, a w przypadku typu unsigned wartość liczona jest od 0 w górę), NOT NULL (czyli musi mieć jakąś wartość), AUTO_INCREMENT - inkrementuj (zwiększaj o 1) przy dodawaniu nowego rekordu.

Kolejne polecenia są analogiczne: imie o długości 30 znaków, nazwisko o długości 30 znaków, email o długości 50 znaków oraz data dodania (format daty DATETIME, czyli rrrr-mm-dd gg-mm-ss, np. 2006-03-12 15:23:01) - i wszystkie kolumny muszą mieć jakąś wartość (NOT NULL).

PRIMARY KEY określa, która z kolumn jest kluczem głównym (na razie nie będę wyjaśniał do czego służą klucze i indeksy - warto wspomnieć, że pole tego typu powinno mieć unikatową wartość - czyli w przypadku tabeli "uzytkownicy" każdy rekord musi mieć inny "uid" - ID użytkownika).

Na końcu zamykamy nawias i stawiamy średnik. Jeżeli nie wystąpiły żadne błędy powinna pojawić się w bazie nowa tabela o podanych wyżej kolumnach.

Do sprawdzenia tabel znajdujących w konkretnej bazie danych można użyć polecenia:

SHOW TABLES;

Do sprawdzenia, jakie kolumny znajdują się w danej tabeli wystarczy wpisać:

SHOW COLUMNS FROM nazwa_tabeli;

Natomiast do sprawdzenia jakie bazy danych istnieją na koncie zalogowanego użytkownika używa się:

SHOW DATABASES;

Polecenie SHOW wypisuje nazwy tabel, baz danych czy też kolumn danej tabeli wraz typami i określonymi parametrami.

Zapytania i operacje

Do operacji na bazach danych MySQL używamy zapytań. Podstawowy przykład został przedstawiony wyżej - zaprojektowanie pierwszej tabeli. Poniżej przeczytasz jakie operacje można wykonywać na uprzednio stworzonej tabeli.

INSERT - wstaw (włóż)

Zapytanie INSERT odnosi się do wstawiania nowych rekordów. INSERT można zastosować na co najmniej dwa sposoby:

INSERT INTO nazwa_tabeli VALUES ('wartosc_kol_1', 'wartosc_kol_2', NULL, 'wartosc_kol_n');

W tym wypadku podaje się kolejno wartości dla kolumn. Jeśli kolumna ma zawierać puste pole trzeba wpisać NULL (w powyższym przykładzie jest to kolumna trzecia).

Sposób ten powinno się wykorzystywać, jeśli wszystkie kolumny mają zostać wypełnione. Dla niewielkich tabel o kilku kolumnach może okazać się to przydatne i szybsze, ale również bardzo podatne na błędy (kolejność musi być zachowana).

Natomiast drugi sposób wygląda tak:

INSERT INTO nazwa_tabeli (kolumna_1, kolumna_7) VALUES ('wartość kol. pierwszej', 'wartość kol. siódmej');

Tutaj sam decydujesz jakie wartości i gdzie chcesz wpisać. Nie musisz ich wstawiać po kolei. Jeżeli większość kolumn ma mieć wartości domyślne to zaleca się właśnie takie użycie tego polecenia.

Teraz pokażę jak wstawić przykładowy rekord do tabeli, którą utworzyłem wcześniej:

INSERT INTO uzytkownicy (imie, nazwisko, email, data_dodania) VALUES ('Bogdan', 'Przykładowski', 'b.example@domena.pl', NOW() );

Jak widać do określenia daty dodania użyłem funkcji NOW(), której używa się do określenia aktualnego czasu. Funkcja NOW() nie jest wpisana w apostrofy.

Po wydaniu polecenia SELECT można wyświetlić te dane (o tym dalej).

Polecenie insert
Rys. 1. Polecenie insert (dwa sposoby) - efekt

Spróbuj teraz samodzielnie dodać kilka rekordów na dwa sposoby - przydadzą się do dalszych ćwiczeń.

Pamiętaj, że w pierwszym sposobie musisz jawnie podać wartości wszystkich kolumn - dla pierwszej kolumny 'uid' przypisz wartość NULL (bez apostrofów) - spowoduje to przydzielenie pierwszego wolnego identyfikatora dla tego pola.

SELECT - wybierz

Służy do wybierania rekordów z bazy danych. Składnia jest bardzo prosta:

SELECT * FROM nazwa_tabeli;

Powyższa instrukcja spowoduje wybranie wszystkich rekordów z tabeli o danej nazwie. Natomiast, aby wybrać określone kolumny należy użyć następującej składni:

SELECT kolumna1, kolumna2 FROM nazwa_tabeli;

Jeżeli nie użyjemy żadnych instrukcji warunkowych zostaną wybrane wszystkie wypisane kolumny i np. wyświetlone na ekranie.

Instrukcje warunkowe i dodatkowe

Niezwykle ważnymi elementami, w operowaniu baz danych, są instrukcje "sterujące" czy "warunkowe". Są szczególnie ważne podczas budowy bardziej skomplikowanych projektów. Nie oznacza to, że są one niezbędne - wręcz przeciwnie - możesz wcale ich nie używać.

Warunek WHERE

Możesz jej użyć do określenia, do których rekordów chcesz się odwołać - czyli sprecyzować zapytanie. Określasz wartość danej kolumny rekordu, np.:

SELECT * FROM nazwa_tabeli WHERE imie='Marian';

Powyższe zapytanie powinno wyświetlić wszystkie rekordy (i wszystkie kolumny), których wartość kolumny "imie" odpowiada ciągowi znaków "Marian". Wartość może być dowolna.

Do określenia warunków możemy stosować operatory takie jak: =, <, >, <=, >= czy != (różny) - czyli te znane z języków programowania. Oprócz tego istnieją jeszcze inne:

Operator Znaczenie
IS NULL - nie ma wartości
IS NOT NULL - ma jakąś wartość
BETWEEN - mieści się w zakresie (jest pomiędzy)
NOT BETWEEN - nie mieści się w zakresie (jest poza)

Polecenie insert - bardziej złożone
Rys. 2. Polecenie insert, select oraz instrukcja warunkowa - efekty

Oprócz tego możemy łączyć ze sobą warunki poprzez OR (także ||) - oznacza logiczne "lub" czyli, że co najmniej jeden warunek został spełniony, oraz AND (także &&) - oznacza logiczne "i" czyli, że wszystkie warunki zostały spełnione. Jeżeli użyjesz samego NOT (lub !) - będzie to oznaczać, że do wykonania instrukcji warunek nie może być spełniony.

LIMIT

Jest to ograniczenie wyników zapytania. Jeśli posłużysz się powyższą instrukcją WHERE, wyświetlą się wszystkie rekordy, których kolumna "imie" ma wartość "Marian". Jeżeli chcesz wyświetlić jeden rekord na końcu zapytania wpisz LIMIT 1, np.:

SELECT * FROM nazwa_tabeli LIMIT 1;

Zostanie wyświetlony pierwszy rekord spełniający określone kryteria.

ORDER BY

Za pomocą tej instrukcji możemy uporządkować (posortować) wyniki zapytania. Mamy tutaj dwie możliwości: ASC - alfabetycznie a-Z lub liczbowo rosnąco ( jeśli sortujesz wg. dat to pierwsza, która się wyświetli będzie tą najstarszą) oraz DESC - odwrotnie do ASC.

SELECT imie, nazwisko, data_dodania ORDER BY data_dodania DESC;

Instrukcje niebezpieczne

Istnieją też polecenia, na które należy uważać. Jeden mały błąd może spowodować, że baza danych zostanie zepsuta (a konkretnie zapisane w niej wartości). Przed testowaniem tych poleceń zaleca się zrobienie kopii zapasowej bazy.

UPDATE - aktualizuj

Jeżeli chcesz ponownie zapisać coś do jakiegoś rekordu użyj UPDATE. Jednak uważaj - jeżeli nie zastosujesz odpowiedniej konstrukcji zapytania z wyraźnym warunkiem określającym jeden rekord (lub więcej) - zostaną zaktualizowane wszystkie rekordy.

Ogólna postać zapytania wygląda następująco:

UPDATE nazwa_tabeli SET kolumna='wartosc';

Jednak zwykle używa się instrukcji WHERE do określenia, który rekord (lub rekordy) ma być uaktualniony.

Przykładem uaktualnienia jedynego możliwego rekordu w tabeli jest następująca składnia:

UPDATE uzytkownicy SET imie='Romek' WHERE uid = 2;

Polecenie insert - bardziej złożone
Rys. 3. Polecenie update - efekty

DELETE - usuń

Czasami przyjdzie potrzeba usunąć jakiś rekord - do tego służy polecenie DELETE:

DELETE FROM nazwa_tabeli WHERE kolumna='wartosc';

Najbezpieczniejszym sposobem usuwania tylko jednego rekordu, jest określenie unikalnego identyfikatora, który nie występuje w innych rekordach, czyli np.

DELETE FROM uzytkownicy WHERE uid = 1;

Jeżeli nie zastosujesz polecenie WHERE stracisz nieodwracalnie wszystkie rekordy w tej tabeli!

DROP - wyrzucać

Za pomocą tego polecenia możesz usunąć np. całą tabelę - DROP nazwa_tabeli; lub nawet całą bazę danych - DROP nazwa_bazy;. Pamiętaj jednak, że wszystkie dane zostaną utracone bezpowrotnie, dlatego najlepiej zrobić kopię bazy danych.

Podsumowanie

Powyżej przedstawiono przykładowe zapytania MySQL, które pomogą postawić pierwsze kroki. Znajomość poleceń INSERT, SELECT, UPDATE oraz LIMIT, ORDER BY oraz WHERE jest wystarczająca do wykorzystania bazy danych w dosyć funkcjonalny sposób.

Podczas uaktualniania / kasowania rekordów należy postępować ostrożnie. Zawsze należy używać instrukcji warunkowych - chyba, że wszystkie rekordy spełniają dany warunek.

Wartości tabel, np. w instrukcjach warunkowych, określa się co najmniej na trzy sposoby: operatorem pisanym (WHERE kolumna IS NULL), dla wartości znakowych - wartość wpisywana jest w nawiasie (WHERE kolumna='wartosc') oraz dla wartości liczbowych - można podać liczbę bez nawiasów (WHERE kolumna != 2).

Dodał: Paweł​Dzedzej
Dział: PHP i bazy danych


 

ComputerSun.pl na FaceBooku
Polecamy lekturę:

Word 2007 PL. Pierwsza pomoc



X

Zapisz się na biuletyn serwisu ComputerSun.pl, aby otrzymać poradnik:

Zabezpieczanie sieci bezprzewodowych. Przydatne wskazówki jak chronić sieć domową przed intruzami

Imię:  
Email:
Tak, akceptuję Politykę Prywatności