Mysql
Z PHPEdia.pl
Spis treści |
Typy danych w MySQL
Liczby całkowite
| Typ | Bajtów | Zakres |
| tinyint | 1 | -128 do +127 |
| smallint | 2 | -32768 do +32767 |
| mediumint | 3 | -8388608 do +8388607 |
| integer | 4 | -2147483648 do +2147483647 |
| bigint | 8 | 17-18 cyfr |
| decimal | zmienne | bez ograniczeń |
| numeric | zmienne | bez ograniczeń |
Decimal i numeric
Pola te przechowują liczby jako łańcuchy co umożliwia przechowywanie liczb o dowolnej długości. Gdy używasz tych typów w bazie danych, możesz określić ich długość oraz precyzją na przykład decimal(14,7)
Liczby zmienno pozycyjne
| Typ | Bajtów | Zakres |
| float | 4 | 6 miejsc dziesiętnych |
| real | 4 | 6 miejsc dziesiętnych |
| double precision | 8 | 15 miejsc dziesiętnych |
W MySQL double jest inną nazwę typu double precision
Łańcuchy
| Typ | Dł. pola w bajtach | Dane w bajtach |
| char | 0 | 1 - 255 |
| varchar | 1 | 1 - 255 |
| tinytext | 1 | 1 - 255 |
| text | 2 | 1 - 65536 |
| mediumtext | 3 | 1 - 16777216 |
| longtext | 4 | 1 - 4294967295 |
| text | 4 | 1 - 4294967295 |
Typy danych tinytext, mediumtext, longtext oraz varchar są polami o zmiennej długości i zawierają tylko dostarczone dane.
Enum
Typ enum służy do przechowywania liczby reprezentującej słowo kluczowe, zdefiniowanej podczas definicji pola tego typu. W typie enum można zdefiniować pole zawierające jakieś dane np. nazwiska, które będzie zajmowało tylko jeden bajt, a nie ilość liter nazwiska (danych), gdyż nazwiska sa przechowywane tylko w jednym miejscu - w definicji pola tabeli, a samo pole zawiera tylko indeks pozycji listy nazwisk (danych). Indeks dla list o rozmiarach do 255 pozycji zajmuje tylko 1 bajt ,a do 65000 poz. 2 bajty.
Set
Typ set umożliwia przechowywanie łańcuchów bitów, w których bity są ustawione dla każdej wartości słowa kluczowego, zawartej w danych wejściowych. Pole o nazwie features przechowuje listę atrybutów. W polu features każdy bit odpowiada jednej opcji, a ponieważ typ set może mieć maksymalną długość 8 bajtów zatem w jednym polu typu set można zmieścić do 64 różnych atrybutów. To pole nadaje się do formularzy w których można wybrać więcej niż jedna opcje.
Data i czas
| Typ | długość w bajtach | Format |
| date | 3 | yyyy-mm-dd |
| datetime | 8 | yyyy-mm-dd hh:mm:ss |
| timestamp | 4 | yyyymmddhhmmss |
| time | 3 | hh:mm:ss |
| year | 1 | 1901 - 2125 |
Typ timestamp jest standardowym zniacznikiem czasu Uniksa, poprawnym dla lat 1970 - 2037.
Zapytania
Operatory
| Operator | Nazwa | przykład | Opis |
| = | równy | userid = 3 | Sprawdza czy wartości są sobie równe |
| > | wiekszy od | userid > 8 | Sprawdza czy pierwsza wartość jest wiąksza od drugiej |
| < | mniejszy od | userid < 8 | Sprawdza czy pierwsza wartość jest mniejsza od drugiej |
| >= | wiekszy lub równy | userid >= 8 | Sprawdza czy pierwsza wartość jest wiąksza lub równa od drugiej |
| <= | mniejszy lub równy | userid <= 8 | Sprawdza czy pierwsza wartość jest mniejsza lub równa od drugiej |
| != lub <> | różny | userid != 1 | Sprawdza czy dwie wartości są różne od siebie |
| IS NOT NULL | . | username IS NOT NULL | Sprawdza czy pole ma nadaną wartość |
| IS NULL | . | username IS NULL | Sprawdza czy pole jest puste |
| BETWEEN | . | user_posts BETWEEN 10 AND 100 | Sprawdza czy wartość jest wiąksza lub równa wartości minimalne i mniejsza lub równa wartości maksymalnej |
| IN | . | userid IN(1,2,3,4,5) | Sprawdza czy wartość należy do określonego zbioru wartości |
| NOT IN | . | userid NOT IN (1,2,3,4) | Sprawdza czy wartość nie należy do określonego zbioru wartości |
| LIKE | wyszukiwanie wzorca | username LIKE 'asd %' | Sprawdza czy wartość pasuje do określonego wzorca |
| NOT LIKE | wyszukiwanie wzorca | username NOT LIKE 'dsa %' | Sprawdza czy wartość nie pasuje do określonego wzorca |
| REGEXP | wyrażenie regularne | username REGEXP '^a.*' | Sprawdza czy wartość pasuje do określonego wyrażenia regularnego |
Grupowanie i agregowanie danych
| Symbol | Opis |
| AVG(kolumna) | Oblicza wartość średnia we wskazanej kolumnie |
| COUNT(kolumna) | Zwraca liczbę niezerowych wartości w podanej kolumnie. Jeżeli nazwa kolumny jest poprzedzona słowem DISTINCT, to funkcja zwróci tylko ilość występujących w niej odrębnych wartości. Jeżeli zamiast nazwy konkretnej kolumny wpisany zostanie symbol* to funkcja zwróci wartość równą liczbie wierszy w tabeli. |
| MIN(kolumna) | Podaje najmniejsza wartość w kolumnie |
| MAX(kolumna) | Podaje najwiekszć wartośc w kolumnie |
| STD(kolumna) | Oblicza odchylenie standardowe w kolumnie |
| STDDEV(kolumna) | j/w |
| SUM(kolumna) | Sumuje wszystkie wartości w kolumnie |
Aby pobrać wynik w wypadku zapytania sql w PHP powinno się dodać oznaczenie AS. wygląda to następująco: SELECT COUNT(kolumna) AS count_kolumna FROM tabela SELECT MIN(kolumna) AS min_kolumna FROM tabela SELECT MAX(kolumna) AS max_kolumna FROM tabela itd. Wartości count_kolumna, min_kolumna, max_kolumna itd. są nazwami nowych rekordów i pobieramy je tak samo z tablicy jak zwykłe rokordy.
LIMIT
Polecenie SELECT posiada klauzule LIMIT, które określa ile trafnych rekordów ma być przekazanych do php. Wykorzystuje się tu dwa parametry: numer wiersza od którego mają być przekazywane rekordy, drugo to ich liczba. przykładowo: SELECT * FROM tabel WHERE warunek LIMIT start,liczba start oznacza od którego wiersza mają być wyświetlane rekordy. liczba oznacza ile tych rekordów ma byc. przykładowe zapytanie: SELECT * FROM nazwa_tabeli WHERE kolumna = LIMIT 0, 30;
przykładowe zapytania
Pobieranie danych
Uwaga : Przed wywołaniem któregokolwiek zapytania do bazy danych, należy najpierw uzyskać połączenie do serwera MySQL, oraz wybrać bazę danych na której będziemy operować. przykład
<?php $polaczenie=mysql_connect('localhost','uzytkownik','haslo'); mysql_select_db('baza'); ?>
przykład : Chcemy pobrać wszystkie dane użytkownika z tabeli o nazwie `users`, któremu przypisane jest `id` równe 4
<?php $zapytanie=" SELECT * FROM `users` WHERE `id`='4'"; $wywolanie=mysql_query($zapytanie,$polaczenie); $dane=mysql_fetch_assoc($wywolanie); ?>
Otrzymamy wynik :
array(
`id`=>4,
`imie`=>'Romek',
`nazwisko`=>'Atomek',
`email`=>'romek_atomek@o2.pl',
`telefon`=>'888787851',
`data_urodzenia`=>'1984-07-07'
}
przykład : Chcemy pobrać wybrane dane użytkownika z tabeli o nazwie `users`, któremu przypisane jest `id` równe 4
<?php $zapytanie=" SELECT `imie`,`nazwisko` FROM `users` WHERE `id`='4'"; $wywolanie=mysql_query($zapytanie,$polaczenie); $dane=mysql_fetch_assoc($wywolanie); ?>
Otrzymamy wynik :
array(
`imie`=>'Romek',
`nazwisko`=>'Atomek',
}
przykład : Chcemy pobrać wybrane dane i przypisać im inne klucze użytkownika z tabeli o nazwie `users` któremu przypisane jest `id` równe 4
<?php $zapytanie=" SELECT `imie` as `Imię`, `nazwisko` as `Nazwisko` FROM `users` WHERE `id`='4'"; $wywolanie=mysql_query($zapytanie,$polaczenie); $dane=mysql_fetch_assoc($wywolanie); ?>
Otrzymamy wynik :
array(
`Imię`=>'Romek',
`Nazwisko`=>'Atomek',
}
przykład : Chcemy pobrać wybrane dane i przypisać im inne klucze z tabeli o nazwie `users` w której użytkownicy mają ukończone 18 lat
<?php $zapytanie=" SELECT `imie` as `Imię`, `nazwisko` as `Nazwisko` FROM `users` WHERE TIMESTAMPDIFF(YEAR,`data_urodzenia`,CURDATE())>18"; $wywolanie=mysql_query($zapytanie,$polaczenie); while($dane=mysql_fetch_assoc($wywolanie)) { print_r($dane); } ?>
Otrzymamy wynik :
array(
`Imię`=>'Romek',
`Nazwisko`=>'Atomek',
}
array(
`Imię`=>'Andriev',
`Nazwisko`=>'Lepiej',
}
array(
`Imię`=>'Jakiś',
`Nazwisko`=>'Koleś',
}
Dodawanie rekordów
przykład : dodajemy rekord do tabeli `users` (przy ustawionym autonumerowaniu dla pola `id`):
<?php $zapytanie=" INSERT INTO `users` (`imie`,`nazwisko`,`email`,`telefon`,`data_urodzenia`) VALUES ('Lech','Kuczynsky','kuczogrod@4rp.pl','1901-12-11')"; $wywolanie=mysql_query($zapytanie,$polaczenie); ?>
Aktualizacja rekordów
przykład : zmieniamy `telefon` oraz `email` dla użytkownika o nazwisku 'Kuczynsky' :
<?php $zapytanie=" UPDATE `users` SET `email`='przykurczogrod@4rp.pl', `telefon`='070072077' WHERE `nazwisko`='Kuczynsky' Limit 1"; $wywolanie=mysql_query($zapytanie,$polaczenie); ?>
Usuwanie rekordów
przykład : usuwamy użytkownika o nazwisku 'Kuczynsky' z tabeli `users` :
<?php $zapytanie=" DELETE FROM `users` WHERE `nazwisko`='Kuczynsky' Limit 1"; $wywolanie=mysql_query($zapytanie,$polaczenie); ?>
UWAGA : WYWOŁANIE TEGO POLECENIA WYCZYŚCI TABELĘ !!
przykład : usuwamy wszystkie dane z tabeli `users` oraz zeruemy auto-numerowania itd.:
<?php $zapytanie=" TRUNCATE TABLE `users` "; $wywolanie=mysql_query($zapytanie,$polaczenie); ?>
Dodawanie tabeli
przykład : tworzymy tabelę `users` nadając auto-numerowanie dla pola `id` , ustawiając na nim klucz główny :
<?php $zapytanie=" CREATE TABLE `users` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'id użytkownika', `imie` VARCHAR( 20 ) NOT NULL COMMENT 'Imię użytkownika', `nazwisko` VARCHAR( 30 ) NOT NULL , `email` VARCHAR( 40 ) NULL , `telefon` VARCHAR( 11 ) NULL , `data_urodzenia` DATE NOT NULL )"; ?>
Edycja tabeli
przykład : zamieniamy komentarz na polu `id`, zmieniamy nazwa pola `email` na 'emailik',ustawiamy wartość domyślną dla pola `telefon`:
<?php $zapytanie=" ALTER TABLE `users` CHANGE `nazwisko` `nazwisko` VARCHAR( 30 ) NOT NULL COMMENT 'inny komentarz', CHANGE `email` `emailik` VARCHAR( 40 ) NOT NULL , CHANGE `telefon` `telefon` INT( 11 ) DEFAULT '00000000000' "; $wywolanie=mysql_query($zapytanie,$polaczenie); ?>
Usuwanie tabeli
przykład : usuwamy tabelę `users`:
<?php $zapytanie=" DROP TABLE `users` "; $wywolanie=mysql_query($zapytanie,$polaczenie); ?>
Naprawa tabeli
przykład : naprawiamy tabelę `users`:
<?php $zapytanie=" REPAIR TABLE `users` "; $wywolanie=mysql_query($zapytanie,$polaczenie); ?>
PHP4
Łączenie z bazą danych
$dbhost = "loacalhost"; // host bazy danych $dbuser = "root"; // Nazwa użytkownika podłączającego się do bazy danych. $dbpass = "root"; // Hasło w/w użytkownika $dbname = "users"; // Nazwa bazy z której chcemy pobrać dane
