🎯 Cele lekcji

✏️

1. Podstawowa składnia UPDATE

-- Aktualizacja jednej kolumny, jednego wiersza
UPDATE klienci
SET email = 'nowy@email.com'
WHERE id_klienta = 42;

-- Aktualizacja wielu kolumn naraz
UPDATE klienci
SET email    = 'anna.nowa@mail.com',
    telefon  = '600123456',
    miasto   = 'Gdańsk'
WHERE id_klienta = 7;

-- Aktualizacja wielu wierszy spełniających warunek
UPDATE produkty
SET aktywny = 0
WHERE ilosc = 0;  -- dezaktywuj produkty niedostępne
NIGDY nie zapomnij o WHERE! UPDATE produkty SET cena = 0; — ta komenda zaktualizuje WSZYSTKIE produkty. W MySQL Workbench jest "Safe Updates Mode" który blokuje UPDATE bez WHERE na kluczu głównym.
🧮

2. UPDATE z wyrażeniami

-- Podnieś ceny o 10% dla kategorii 'Elektronika'
UPDATE produkty
SET cena = cena * 1.10
WHERE kategoria = 'Elektronika';

-- Obniżka 15% dla produktów z zerową sprzedażą w zeszłym roku
UPDATE produkty
SET cena = cena * 0.85,
    opis = CONCAT(opis, ' [PROMOCJA]')
WHERE id_produktu IN (
    SELECT id_produktu FROM produkty_brak_sprzedazy
);

-- Ustaw datę modyfikacji na teraz
UPDATE artykuly
SET tresc         = 'Nowa treść...',
    zmodyfikowano  = NOW()
WHERE id_artykulu = 123;

-- Zamień NULL na wartość domyślną
UPDATE klienci
SET miasto = 'Nieznane'
WHERE miasto IS NULL;
🔗

3. UPDATE z JOIN (MySQL)

-- Zmień status na 'nieaktywny' dla klientów bez zamówień
UPDATE klienci k
LEFT JOIN zamowienia z ON k.id_klienta = z.id_klienta
SET k.aktywny = 0
WHERE z.id_zamowienia IS NULL;

-- Aktualizacja ceny produktu na podstawie tabeli cennika
UPDATE produkty p
INNER JOIN nowy_cennik nc ON p.id_produktu = nc.id_produktu
SET p.cena = nc.nowa_cena
WHERE nc.obowiazuje_od <= CURDATE();
W MySQL UPDATE z JOIN jest możliwy i bardzo wydajny. Alternatywnie można użyć podzapytania w WHERE, ale UPDATE z JOIN jest czytelniejszy.

Transakcje przy UPDATE:

-- Bezpieczna aktualizacja w transakcji
START TRANSACTION;

UPDATE konta SET saldo = saldo - 500 WHERE id_konta = 1;
UPDATE konta SET saldo = saldo + 500 WHERE id_konta = 2;

-- Sprawdź czy wszystko OK, dopiero potem COMMIT
COMMIT;   -- lub ROLLBACK jeśli coś poszło nie tak
✏️

Zadania interaktywne

Zadanie 1Quiz: UPDATE bez WHERE

Co się stanie po wykonaniu polecenia: UPDATE pracownicy SET wynagrodzenie = 3000; (bez WHERE)?

  • Tylko jeden, losowo wybrany pracownik otrzyma wynagrodzenie 3000
  • Serwer zwróci błąd — UPDATE wymaga klauzuli WHERE
  • Wynagrodzenie WSZYSTKICH pracowników zostanie zmienione na 3000
  • Nic się nie stanie — MySQL ignoruje UPDATE bez WHERE
Zadanie 2Napisz UPDATE: podwyżka dla działu IT

Tabela pracownicy(id, imie, nazwisko, wynagrodzenie, dzial). Napisz UPDATE zwiększający wynagrodzenie o 500 dla pracowników działu 'IT':

Zadanie 3Popraw błędny UPDATE

Poniższy UPDATE zawiera błędy. Który zapis jest poprawny?

-- Błędna wersja:
UPDATE SET produkty cena = cena * 1.05
WHERE kategoria = 'Sport';
  • UPDATE produkty SET cena = cena * 1.05 WHERE kategoria = 'Sport';
  • UPDATE produkty cena = cena * 1.05 WHERE kategoria = 'Sport';
  • SET produkty UPDATE cena = cena * 1.05 WHERE kategoria = 'Sport';
  • UPDATE produkty WHERE kategoria = 'Sport' SET cena = cena * 1.05;

📌 Zapamiętaj