Podstawy MySql

advertisement
Podstawy MySql
MySQL jest obecnie najpopularniejszym silnikiem relacyjnych baz danych i zarazem jednym z
szybszych, udostępnianym na licencji GPL. Do komunikacji z innymi programami używa
standardowego języku zapytań (SQL) wraz z własnymi rozszerzonymi jego funkcjami.
Połączenie z bazą danych:
$sql_conn = mysql_connect('serwer.com', 'admin', 'passwd')
Zakończenie połączenia z bazą
mysql_close([identyfikator_połączenia]);
Aby wykonać jakiekolwiek operacje na swojej bazie danych należy wysłać do niej informacje o tym co
chcemy zrobić. Wszystkie informacje wysyłamy w postaci zapytań, do czego wykorzystujemy PHPową
funkcję
mysql_query([zapytanie]);
Zapytania do bazy danych wysyłamy w następujący sposób:
$zaptanie = "treść zapytania SQL";
$idzapytania = mysql_query($zapytanie);
Zmienna $idzapytania będzie zawierała identyfikator zapytania o ile zapytanie zostanie wykonane
pomyślnie. W przypadku, gdy popełniliśmy błąd w zapytaniu zmienna $idzapytania będzie zawierała
wartość false.
1. Tworzenie tabeli
$zapytanie = 'CREATE TABLE studenci (id int NOT NULL AUTO_INCREMENT, imie char(30),
nazwisko char(50), rok_studiow char(3), wiek char(3), PRIMARY KEY(id))';
2. Dodawanie wiersza do tabeli
$zapytanie = "INSERT INTO `studenci` (`id`, `imie`, `nazwisko`, `rok_studiow` ,
`wiek`) VALUES ('', 'Jan', 'Kowalski', '1', '23')";
3. Wybieranie danych z tabeli
$zapytanie = "SELECT `imie`,`nazwisko` FROM `studenci` WHERE `rok_studiow`='1'";
Wybieranie danych z tabeli z wyświetleniem ich w tabeli:
$zapytanie = "SELECT `id`,`nazwisko`,`imie`,`rok_studiow` FROM `studenci`";
$idzapytania = mysql_query($zapytanie);
echo '<table>';
while ($wiersz = mysql_fetch_row($idzapytania))
{
echo '<tr><td>'. $wiersz[0] .'</td><td>'. $wiersz[1] .'</td><td>'. $wiersz[2]
.'</td><td>'. $wiersz[3] .'</td></tr>';
}
echo '<table>';
4. Aktualizacja rekordów
$zapytanie = "UPDATE `studenci` SET `rok_studiow` = '2',`wiek` = '25' WHERE
`id`='1'";
5. Usuwanie rekordów
$zapytanie = "DELETE FROM `studenci` WHERE `nazwisko`='Kowalski'";
Przykład 1
// połączenie się lokalnym serwerem bazy MySQL
$sql_conn = mysql_connect('localhost', 'admin', 'passwd')
// w przypadku niepowodzenia połączenia zakończ aplikację
or die('Nie mogłem połaczyć się z bazą danych');
// jeśli nie mamy jeszcze bazy to musimy ją utworzyć
mysql_create_db('zawodnicy');
// wybieramy bazę danych
mysql_select_db('zawodnicy');
// tworzymy tabelę nba
$zapytanie = 'CREATE TABLE nba (id int NOT NULL AUTO_INCREMENT, nazwisko char(30),
lata char(3), punkty char(3), mistrzostwa char(3), PRIMARY KEY(id))';
$idzapytania = mysql_query($zapytanie);
// dodajemy troche przykładowych danych
$zapytanie = "INSERT INTO `nba` (`id`, `nazwisko`, `lata`, `punkty` ,
`mistrzostwa`) VALUES ('', 'Jordan', '13', '258', '48')";
$idzapytania = mysql_query($zapytanie);
$zapytanie = "INSERT INTO `nba` (`id`, `nazwisko`, `lata`, `punkty` ,
`mistrzostwa`) VALUES ('', 'Pipen', '10', '123', '32')";
$idzapytania = mysql_query($zapytanie);
$zapytanie = "INSERT INTO `nba` (`id`, `nazwisko`, `lata`, `punkty` ,
`mistrzostwa`) VALUES ('', 'O\'Neal', '10', '205', '50')";
$idzapytania = mysql_query($zapytanie);
// wyświetlamy treść naszej tabeli
$zapytanie = "SELECT `id`,`nazwisko`,`lata`,`punkty` FROM `nba`";
$idzapytania = mysql_query($zapytanie);
echo '<table>';
while ($wiersz = mysql_fetch_row($idzapytania)) {
echo '<tr><td>'. $wiersz[0] .'</td><td>'. $wiersz[1] .'</td><td>'. $wiersz[2]
.'</td><td>'. $wiersz[3] .'</td></tr>';
}
echo '</table>';
// zamykamy połączenie
mysql_close($sql_conn);
Poniżej kilka przydatnych funkcji w PHP:
mysql_num_rows($wynik_zapytania) - zwraca ilość wierszy zwróconych przez zapytanie
mysql_num_fields($wynik_zapytania) - zwraca ilość pól zwróconych przez zapytanie
mysql_list_dbs($polaczenie) - zwraca wszystkie nazwy baz znajdujących się na
serwerze
mysql_connect(host,uzytkownik,hasło) - połączenie z bazą danych
mysql_query($zapytanie) - wykonanie zapytania do bazy danych
Porcjowanie danych na stronie
SELECT nazwa_pola FROM nazwa_tabeli LIMIT pozycja, ilosc
Pierwszy argument pozycja określa pozycje w zbiorze wyników zapytań. Drugi argument ilość określa
ilość wyświetlanych rekordów. Czyli jeśli jako pierwszy argument wstawimy 0 a jako drugi 10 to
zapytanie zwróci dziesięć pierwszych rekordów, jeśli jako pierwszy argument podamy 10, a jako drugi
10 to zapytanie zwróci kolejne dziesięć wierszy itd. Kompletny przykład kodu PHP:
$strona = $_GET['s'];
// Wynikow Na Strone
$wns = 10;
settype($strona, "integer");
$tresc_zapytania_max = 'SELECT `id` FROM `nba`';
$zapytanie_max = mysql_query($tresc_zapytania_max);
// $r_max zawiera ilosc wszystkich rekordow w tabeli
$r_max = mysql_num_rows($zapytanie_max);
$tresc_zapytania = 'SELECT `nazwisko`, `punkty` FROM `nba` ORDER BY `nazwisko`
LIMIT '.($strona*$wns).','.$wns;
$zapytanie = mysql_query($tresc_zapytania);
while ($wiersz = mysql_fetch_row($zapytanie)) {
echo 'Gracz '.$wiersz[0].' zdobył '.$wiersz[1].' puntów(y).';
}
$lStron = ceil($r_max/$wns);
for ($i=0;$i<$lStron;$i++)
echo ''.($i+1).'';
Złączenie tabel
•
INNER JOIN – łączenie tabel przy wyświetlaniu
W tabelach przechowujemy różne dane, takie jak: pensje, adresy, czy stanowiska. Co w przypadku
kiedy chcielibyśmy wyświetlić te dane w jednej tabeli ? Możemy tego dokonać stosując
operator INNER JOIN (złączenie wewnętrzne tabel) razem z poleceniem SELECT, które złączy
wskazane przez nas tabele i kolumny. Polecenie będzie miało wtedy następującą składnie:
SELECT lista_kolumn FROM nazwa_tabeli INNER JOIN nazwa_tabeli_2 ON
warunek_złączenia
Przykład:
Zadaniem naszym jest wyświetlenie w jednej tabeli następujących danych: „id_pracownika”, „imie”,
„nazwisko” oraz „adres_email”. Trzy pierwsze dane znajdują się w tabeli „pracownik”, zaś adres email w tabeli „adresy”. Wspólnym polem dla obu tabel jest „id_pracownika” i to ono posłuży nam do
złączenia tabel następującym poleceniem:
SELECT pracownik.id_pracownika, imie, nazwisko, adres_email FROM pracownik INNER
JOIN adresy ON pracownik.id_pracownika = adresy.id_pracownika
Przykładowy wynik
id_pracownika
imie
nazwisko
adres_email
12008
Jan
Kowalski
[email protected]
22008
Adam
Nowakowski
[email protected]
32008
Kasia
Kowalska
NULL
W trzecim rzędzie pole adresu ma wartość NULL, ponieważ nie zawierało w bazie danych adresu email. Warunek złączenia: pracownik.id_pracownika = adresy.id_pracownika składa się z
nazwy_pierwszej_tabeli.wspolna_kolumna = nazwa_drugiej_tabeli.wspolna_kolumna.
Jeżeli chcielibyśmy do tej tabeli dołączyć jeszcze informacje na temat stanowiska pracownika
przechowywane w polu „stanowisko” w tabeli „stanowiska” polecenie miałoby następującą formę:
SELECT pracownik.id_pracownika, imie, nazwisko, adres_email, stanowisko FROM
pracownik INNER JOIN adresy ON pracownik.id_pracownika = adresy.id_pracownika INNER
JOIN stanowiska ON pracownik.id_pracownika = stanowiska.id_pracownika
Przykładowy wynik
id_pracownika
imie
nazwisko
adres_email
stanowisko
12008
Jan
Kowalski
[email protected]
przedstawiciel handlowy
22008
Adam
Nowakowski
[email protected]
księgowa
32008
Kasia
Kowalska
NULL
kasjer
W języku SQL mamy jeszcze następujące rodzaje złączeń:


LEFT OUTER JOIN – lewostronne złączenie zewnętrzne, które zwraca wszystkie wiersze po lewej
stronie klauzuli JOIN, zaś z tabeli po prawej stronie tylko wiersze dla których warunek złączenia
jest prawdziwy. W przypadku kiedy wiersz z lewej tabeli nie ma odpowiadającego mu wiersza z
prawej tabeli to odpowiednie pola zostają wypełniane wartością NULL.
RIGHT OUTER JOIN – prawostronne złączenie zewnętrzne funkcjonuje w analogiczny sposób.
Kursy MySql linki:
http://www.sql-kursy.pl/mysql-podstawy-mysql-create_table.html
http://webmaster.helion.pl/index.php/kurs-mysql
http://webmade.org/kursy-online/kurs-mysql.php
i inne…
Download