Zapisz się na nasz newsletter
Otrzymuj regularne aktualizacje, specjalne oferty i porady od ekspertów, które pomogą Ci osiągnąć więcej w krótszym czasie.
W tym artykule zobaczysz krok po kroku, jak zainstalować MySQL na Windows, macOS i Linux, utworzyć swoją pierwszą bazę danych, użytkownika i tabelę, a potem wykonać podstawowe operacje — od INSERT po DELETE. Dowiesz się też, jak łączyć się z bazą przez CLI lub GUI, jakie błędy popełniają początkujący i jak ćwiczyć w praktyce, żeby SQL faktycznie „został w głowie".
Czym jest MySQL i gdzie się go używa
MySQL to relacyjny system zarządzania bazą danych (RDBMS) zgodny z SQL, powszechnie wykorzystywany w aplikacjach webowych, systemach e-commerce i analityce operacyjnej. Najlepiej sprawdza się w typowych obciążeniach OLTP, oferując transakcje (InnoDB), replikację i mechanizmy wysokiej dostępności.
Jest dostępny w edycji Community (open source) i Enterprise. Często porównuje się go z PostgreSQL pod kątem funkcji i wydajności — różnice syntetycznie omawiam w tekście: PostgreSQL vs MySQL: różnice, które mają znaczenie.

MySQL — Jak zacząć? Darmowy e-book
Praktyczny przewodnik po świecie SQL. Poznaj typy danych, zapytania SELECT, JOIN, funkcje agregujące i nie tylko.
Instalacja MySQL na Windows, macOS i Linux
Windows: użyj MySQL Installer (MSI) z mysql.com. Wybierz MySQL Server 8.0+, ustaw hasło dla użytkownika root, włącz uruchamianie jako usługa, zachowaj port 3306. Po instalacji uruchom “MySQL Shell” lub “MySQL Command Line Client”.
macOS: najwygodniej przez Homebrew: brew install mysql, potem brew services start mysql. Ustaw hasło dla root poleceniem mysql_secure_installation i włącz logowanie błędów. Alternatywnie użyj oficjalnego DMG.
Linux: na Debian/Ubuntu zainstaluj pakiety mysql-server (APT), na RHEL/CentOS/Rocky użyj repo Oracle lub mysql80-community (YUM/DNF). Po instalacji sprawdź status usługi (systemctl status mysqld), ustaw hasło root (log w /var/log/mysqld.log może zawierać hasło tymczasowe) i wykonaj mysql_secure_installation.
Tworzenie użytkownika, bazy i tabeli
Po instalacji zaloguj się jako root i utwórz pierwszą bazę danych MySQL, dedykowanego użytkownika MySQL oraz tabele MySQL w silniku InnoDB. Stosuj kodowanie utf8mb4 i nowoczesne porównania (_0900_ai_ci) dla poprawnej obsługi Unicode.
Poniżej minimalny, działający zestaw komend MySQL (komendy MySQL uruchom w MySQL CLI, np. mysql -u root -p):
SQL1 2 3 4 5 6 7 8 9 10 11 12 13-- Baza i użytkownik CREATE DATABASE demo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPass!23'; GRANT ALL PRIVILEGES ON demo.* TO 'app_user'@'localhost'; -- Prosta tabela CREATE TABLE demo.customers ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(120) NOT NULL, email VARCHAR(190) NOT NULL UNIQUE, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Łączenie z bazą przez CLI lub narzędzie graficzne
CLI: użyj MySQL CLI. Połączenie lokalne: mysql -u app_user -p -h 127.0.0.1 -P 3306 demo. Sprawdź: SELECT VERSION(); i SELECT DATABASE();. Dla zdalnych hostów włącz TCP, odpowiedni firewall i jeśli to możliwe — SSL/TLS.
GUI: MySQL Workbench (oficjalne), DBeaver lub TablePlus. W formularzu połączenia ustaw Host, Port 3306, użytkownika app_user, hasło i bazę demo. Po teście połączenia uruchom zapytanie kontrolne, np. SELECT COUNT(*) FROM demo.customers;.
Podstawowe operacje: INSERT, SELECT, UPDATE, DELETE
Poniższe komendy MySQL pokazują podstawy MySQL na naszej tabeli. Zwróć uwagę na warunki w UPDATE/DELETE i wykorzystywanie indeksu unikalnego na email.
SQL1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20-- INSERT INSERT INTO demo.customers (name, email) VALUES ('Anna Kowalska', 'anna@example.com'), ('Jan Nowak', 'jan@example.com'); -- SELECT SELECT id, name, email, created_at FROM demo.customers WHERE email LIKE '%@example.com' ORDER BY id DESC LIMIT 10; -- UPDATE (z warunkiem!) UPDATE demo.customers SET name = 'Jan A. Nowak' WHERE email = 'jan@example.com'; -- DELETE (z warunkiem!) DELETE FROM demo.customers WHERE email = 'anna@example.com';
Chcesz pogłębić składnię zapytań i filtry? Zobacz: Podstawy SQL: SELECT, WHERE, JOIN, GROUP BY.
Różnice w zachowaniu MySQL względem standardu SQL
Część zachowań domyślnych MySQL odbiega od standardu. Przykłady: LIMIT zamiast FETCH FIRST; cudzysłowy odwrotne (\``) do cytowania identyfikatorów; funkcje daty/czasu i stringów o nazwach specyficznych dla MySQL; REPLACEzamiast standardowegoMERGE/UPSERT(w MySQL 8 preferujINSERT ... ON DUPLICATE KEY UPDATE`).
Istotne tryby SQL: ONLY_FULL_GROUP_BY (ścisłe grupowanie), STRICT_TRANS_TABLES (walidacja wartości), ANSI_QUOTES (traktuje " jako cytowanie identyfikatorów). Typ BOOLEAN to alias TINYINT(1); domyślne porównania łańcuchów zależą od kolacji i bywają nieczułe na wielkość liter; niejawne konwersje typów mogą zmieniać wynik. Szczegóły typów danych porównuję tu: Typy danych w SQL: porównanie PostgreSQL i MySQL.
Najczęstsze błędy początkujących
Aktualizacje lub usunięcia bez WHERE; brak transakcji przy zmianach wielowierszowych; użycie konta root w aplikacji zamiast dedykowanego użytkownika MySQL z ograniczonymi uprawnieniami; brak indeksów pod filtry i klucze obce w tabelach MySQL; pozostawienie domyślnej kolacji niepasującej do języka i sortowania.
Inne potknięcia: użycie FLOAT/DOUBLE do kwot zamiast DECIMAL; brak utf8mb4; ignorowanie stref czasowych i TIMESTAMP vs DATETIME; mieszanie CHARSET/COLLATE między tabelami; brak kopii zapasowych i testu odtwarzania; otwieranie serwera na świat bez TLS i bez ograniczeń adresów.
Ćwiczenia praktyczne
Zadanie 1: instalacja MySQL na Twoim systemie i konfiguracja root. Zadanie 2: załóż bazę demo, użytkownika app_user z dostępem tylko do demo. Zadanie 3: utwórz tabelę customers jak w przykładzie, dodaj 5 rekordów, przygotuj 3 selekty z różnymi filtrami i sortowaniem. Zadanie 4: wykonaj UPDATE i DELETE w transakcji, a następnie ROLLBACK i sprawdź efekty.
Zadanie 5: dodaj indeks na email, zmierz różnicę w czasie dla SELECT WHERE email = ...; dodaj drugą tabelę orders z kluczem obcym do customers(id) i przygotuj JOIN. Po więcej inspiracji zajrzyj do: Zadania SQL: poziom podstawowy.

Kurs SkumajBazy — Czas w końcu nauczyć się SQLa
Kompleksowy kurs SQL dla programistów, analityków i wszystkich, którzy chcą efektywnie pracować z danymi. Od podstaw do zaawansowanych zapytań.



