Kurs MySQL – Podstawowe zapytania

Wiemy już jak rozpocząć naukę MySQL i jak szybko i sprytnie uruchomić serwer bazodanowy na Windowsie. Dzięki serwerowi XAMPP możemy szybko przejść do kolejnego etapu. Dziś postawimy pierwsze kroki w zapytaniach MySQL  dla początkujących. Dowiecie się jak stworzyć nową bazę danych i tabele oraz dodamy, zmodyfikujemy i usuniemy z niej rekordy.

Tworzenie nowej bazy danych w MySQL

Najczęściej w pracy developera tworzę nową bazę danych z konsoli za pomocą polecenia mysqladmin:

mysqladmin -u [użytkownik] -p create [nazwabazy]

Aby połączyć się z bazą danych w konsoli należy wykonać polecenie mysql

mysql -u [użytkownik] –p

Po wprowadzeniu hasła należy wykonać zapytanie w bazie:

use [nazwabazy]; -- np. use kursmysql;

Aby wyświetlić wszystkie bazy należy wykonać zapytanie:

show databases;

Dla osoby początkującej jednak te polecenia praktycznie będzie nieprzydatne. Wyjątkiem będą miłośnicy konsoli.

Jeżeli zainstalowałeś serwer xampp, korzystając z instrukcji zawartej w poprzedniej lekcji, przejdź do narzędzia phpMyAdmin do zakładki „Bazy danych”

Następnie uzupełnij formularz jak na poniższym screenie i kliknij przycisk „Utwórz”.

W pole po lewej wpisujemy nazwę nowej bazy danych, a po prawej określamy kodowanie oraz metodę porównywania napisów. Cechę tę można później zmienić. Innym sposobem jest wykonanie polecenia w zakładce SQL:

create database kursmysql character set utf8 collate utf8_general_ci ;

Tworzenie nowe tabeli w MySQL

Po przeładowaniu formularza tworzenia bazy danych pojawi się nam formularz, który umożliwia stworzenie pierwszej tabeli. Wypełnij go jak na screenie poniżej i kliknij w przycisk „Wykonaj”

Po przeładowaniu się przeglądarki, pojawi się kolejny formularz, który pozwoli na zdefiniowanie kolumn tabeli. Wypełnij go jak na poniższym screenie i kliknij w przycisk „Zapisz”

Kiedy tabela zostanie utworzona, przeniesieni zostaniemy do jej podglądu:

Podobnie wygląda tworzenie tabel w narzędziach desktopowych takich jak mysql workbench, sqlyog itp. Ten sam efekt możemy osiągnąć za pomocą zapytania SQL.

CREATE TABLE `imiona` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `imie` varchar(64) NOT NULL,
  `plec` enum('m','k') NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Wygląda kosmicznie, jednak tak naprawdę jest to bardzo proste. W kolejnej lekcji poznamy typy danych i jak z nimi pracować. Na razie nie przejmuj się tym, że nie jest to do końca jeszcze jasne 😊 . Wypadałoby jednak wytłumaczyć co znaczą te, które właśnie użyliśmy.

INT 4-bajtowa wartość całkowita. Zakres wartości ze znakiem od -2 147 483 648 do 2 147 483 647 lub bez znaku od 0 do 4 294 967 295
ENUM Kolumna łańcuchowa, która może zawierać jedną z wartości wymienionych na liście wartości w definicji tej kolumny
VARCHAR Pole znakowe o zmiennej długości z zakresu od 1 do 255 bajtów. Zajmowany jest jedynie taki obszar pamięci, jakiego wymaga wartość wstawiona w to pole
PRIMARY KEY Określa klucz główny tabeli
AUTO_INCREMENT Kolumna automatycznie dodaje +1 do poprzedniej wartości. Nie podajemy w zapytaniu SQL INSERT wartości zostawiając to pole puste. Baza danych automatycznie je uzupełni.
NOT NULL Wartość nie może być pusta. Należy tutaj uważać na znaczenie słowa NULL. NULL oznacza brak wartości i nie jest jednoznaczna z wartością 0 lub białym znakiem.

Dodawanie rekordów do tabeli w MySQL

Rekordy możemy dodawać za pomocą dostępnego narzędzia „Wstaw” w phpMyAdmin.

albo za pomocą zapytań. Zdecydowanie częściej jednak w pracy developera będziemy korzystać właśnie z zapytań. Rekordy możemy dodawać pojedynczo bądź wiele jednocześnie.

DELETE FROM `imiona` WHERE `id` = -1;

Zauważ, że nie podawaliśmy w poleceniu ID. Dzięki auto_increment numery nadawane są automatycznie. Ciekawostką jest jednak, że można wprowadzić wartość minusową ID, mimo iż baza jako pierwszy numer nadała „1”. Szerzej wyjaśnimy to w kolejnej lekcji. Wykonaj jednak testowe zapytanie by się przekonać:

INSERT INTO `imiona` (`id`, `imie`, `plec`) VALUES (-1, 'Michał', 'm');

Usuwanie rekordów z tabeli w MySQL

Narzędzie phpMyAdmin w podglądzie wyników posiada funkcję „Usuń”. Jednak nie jest to często używana opcja. Skrypty jednak nie będą same klikały po phpMyAdmin, a wykonywały zapytania SQL bezpośrednio w bazie danych. Jeśli wiemy jaki dokładnie rekord chcemy usunąć, np. znamy jego ID, zapytanie jest bardzo proste np.:

DELETE FROM `imiona` WHERE `id` = -1;

Rekord do usunięcia może być jednak uzależniony od innej wartości przechowywanej w innej tabeli. To jednak nie ten moment, wrócimy do tego przy bardziej zaawansowanych zapytaniach 😊

Aby wyczyścić całkowicie tabelę należy wykonać zapytanie:

TRUNCATE `imiona`;

Tą samą opcję również znajdziemy w phpMyAdmin.

Modyfikowanie rekordów w MySQL

Pracując z danymi będziemy je chcieli prędzej czy później zmodyfikować. Możemy to zrobić za pomocą phpMyAdmin wykorzystując opcję ‘Edytuj’ na liście rekordów bądź wykorzystując zapytanie UPDATE np.:

UPDATE `imiona` SET 'imie` = 'Kamil' WHERE `id` = -1;

W tym przykładzie zmodyfikujemy tylko jeden rekord, jednak nic nie stoi na przeszkodzie by można było zmodyfikować ich wiele. Wszystko zależy od tego jaki warunek zastosujemy.

Zapytania UPDATE mogą wyglądać zdecydowanie bardziej zaawansowanie. Wrócimy do nich w dalszej części kursu.

Wyszukiwanie rekordów w MySQL

Podobnie jak w poprzednich przykładach, możemy skorzystać z narzędzi phpMyAdmin:

Poniżej znajduje się lista dostępnych operatorów

LIKE Wykorzystywany do wyszukiwania określonego wzorca. W Połączeniu z LIKE można używać dwóch symboli wieloznacznych:

% – znak procentu reprezentuje zero, jeden lub wiele dowolnych znaków

_ – znak podkreślenia reprezentuje dokładnie jeden dowolny znak

LIKE %…%
NOT LIKE Wykorzystywany do wyszukiwania rekordów nie pasujących do wzorca. Można używać symboli wieloznacznych jw.
=

= ”

Wykorzystywany do wyszukiwania rekordów z określoną wartością w kolumnie.
!=

! = ”

Wykorzystywany do wyszukiwania rekordów, które nie posiadają wskazanej wartości w kolumnie
REGEXP Wykorzystywany do wyszukiwania określonego wzorca określonego za pomocą wyrażeń regularnych. Jeśli wzorzec zostanie odnaleziony funkcja zwraca wartość 1, w przeciwnym razie 0. W przypadku gdy wyrażenie lub wzorzec ma wartość NULL, funkcja zwróci wartość NULL
REGEXP ^…$
NOT REGEXP Wykorzystywany do znajdywania rekordów nie pasujących do określonego wzorca określonego za pomocą wyrażeń regularnych.
IN (…) Funkcja wykorzystywana do wyszukiwania rekordów, które posiadają wartość kolumny dopasowaną do podanych argumentów.
NOT IN (…) Funkcja wykorzystywana do wyszukiwania rekordów, których wartość kolumny jest inna niż wprowadzone argumenty
BETWEEN Wykorzystywane do wyszukiwania rekordów których wartość kolumny zawiera się pomiędzy wprowadzonymi argumentami. Zwracany zbiór jest zbiorem zamkniętym.
NOT BETWEEN Wykorzystywane do wyszukiwania rekordów których wartość kolumny nie zawiera się pomiędzy wprowadzonymi argumentami. Zwracany zbiór jest zbiorem otwartym.
IS NULL Wykorzystywany do zwrócenia zbioru rekordów, których wartość kolumny równa jest wartości NULL
IS NOT NULL Wykorzystywany do zwrócenia zbioru rekordów, których wartość kolumny nie jest wartością NULL

Najprostszym zapytaniem SQL jakie możemy wykonać na stworzonej przez nas tabeli to:

SELECT * FROM `imiona`;

Zapytanie to zwróci nam wszystkie rekordy z tabeli posortowane wg klucza głównego rosnąco.

Jeśli chcemy odwrócić sortowanie, musimy użyć ORDER BY, wskazać kolumnę po której będziemy sortować oraz metodę (ASC – rosnąco, DESC – malejąco)

SELECT * FROM `imiona` ORDER BY `id` DESC;

Możemy również wyświetlić 2 ostatnio dodane rekordy dzięki poleceniu LIMIT .

SELECT * FROM `imiona` ORDER BY `id` DESC LIMIT 2;

Te proste zapytania wykonywane pod konsolą w przypadku tabel z dużą ilością kolumn mogą być bardzo nieczytelne. Stosuję wówczas przełącznik \G