Nakon ovog poglavlja
Što ćete znati napraviti
- Dohvatiti, filtrirati, sortirati i straničiti retke.
- Sigurno mijenjati podatke uz precizan WHERE.
- Objasniti atomarnost transakcije.
Pitajte točno
Dohvat, filter, sortiranje i limit
SELECT navodi potrebne stupce; SELECT * često prenosi više podataka i skriva ugovor rezultata. WHERE filtrira prije grupiranja, ORDER BY daje determinističan redoslijed, a LIMIT ograničava broj rezultata.
Kod straničenja dodajte stabilan sekundarni redoslijed, primjerice id, kako zapisi s istim datumom ne bi mijenjali mjesto između zahtjeva.
SELECT id, title, published_at
FROM articles
WHERE status = 'published'
AND published_at <= CURRENT_TIMESTAMP
ORDER BY published_at DESC, id DESC
LIMIT 20 OFFSET 0;
Namjerna mutacija
INSERT, UPDATE i DELETE
INSERT stvara redak, UPDATE mijenja postojeće, a DELETE briše. UPDATE ili DELETE bez WHERE može zahvatiti cijelu tablicu. Prije složene promjene napišite ekvivalentni SELECT s istim WHERE uvjetom i pregledajte ciljane retke.
INSERT INTO articles (author_id, title, body, status)
VALUES (17, 'Moderni PHP', 'Sadržaj...', 'draft');
UPDATE articles
SET status = 'published', published_at = CURRENT_TIMESTAMP
WHERE id = 42 AND status = 'review';
Više tablica, jedna cjelina
JOIN povezuje, transakcija štiti
JOIN povezuje retke preko ključeva. INNER JOIN vraća samo podudaranja, LEFT JOIN zadržava sve retke lijeve tablice. Transakcija grupira više promjena: COMMIT ih potvrđuje, ROLLBACK poništava ako korak ne uspije.
START TRANSACTION;
UPDATE accounts SET balance_cents = balance_cents - 5000 WHERE id = 1;
UPDATE accounts SET balance_cents = balance_cents + 5000 WHERE id = 2;
COMMIT;
Primijenite naučeno
Vježba: Upiti baze znanja
Na modelu iz prethodnog poglavlja napišite osnovne upite.
- Dohvatite 10 najnovijih objavljenih članaka s imenom autora.
- Dodajte skicu članka.
- Objavite članak samo ako je trenutačno na provjeri.
Za provjeru i nastavak