Poprawna kwerenda UPDATE artykuly SET nowy = TRUE; jest klasycznym przykładem instrukcji aktualizacji danych w SQL. Słowo kluczowe UPDATE wskazuje, że modyfikujemy istniejące rekordy, a nie dodajemy nowe. Nazwa tabeli artykuly określa, w której tabeli wykonujemy operację. Następnie część SET nowy = TRUE ustawia dla kolumny nowy wartość logiczną TRUE we wszystkich wierszach, ponieważ w zapytaniu nie ma klauzuli WHERE. I to jest tu kluczowe: brak WHERE oznacza, że aktualizacja dotknie każdego rekordu w tabeli. Moim zdaniem warto zapamiętać schemat: UPDATE nazwa_tabeli SET kolumna = wartość WHERE warunek;. W praktyce bardzo często dodaje się WHERE, np.: UPDATE artykuly SET nowy = TRUE WHERE data_dodania >= '2026-01-01'; – wtedy oznaczamy jako nowe tylko artykuły dodane od konkretnej daty. W zadaniu jednak wyraźnie jest mowa o każdym rekordzie, więc brak WHERE jest jak najbardziej zgodny z treścią. W większości systemów bazodanowych (MySQL, PostgreSQL, SQL Server, MariaDB) ta składnia jest standardowa i zalecana. Dobra praktyka jest taka, żeby przed odpaleniem UPDATE bez WHERE najpierw zrobić SELECT * FROM artykuly; albo SELECT COUNT(*) FROM artykuly;, żeby mieć świadomość, ile rekordów zmienimy. W projektach produkcyjnych często dodaje się też transakcje, np. w PostgreSQL: BEGIN; UPDATE artykuly SET nowy = TRUE; COMMIT; dzięki temu w razie pomyłki można zrobić ROLLBACK. Warto też wiedzieć, że kolumna typu logicznego może przyjmować wartości TRUE, FALSE, czasem 1/0 (np. w MySQL), ale forma z TRUE/FALSE jest czytelniejsza i bardziej zgodna z semantyką. W wielu aplikacjach webowych pole w stylu nowy służy np. do filtrowania artykułów w panelu administracyjnym albo na stronie głównej: SELECT * FROM artykuly WHERE nowy = TRUE;. To dokładnie ten sam atrybut, który przed chwilą masowo ustawiliśmy poleceniem UPDATE.
W tym zadaniu kluczowe jest zrozumienie różnicy między poleceniami UPDATE i INSERT w SQL oraz poprawnej składni tych instrukcji. Chodzi o modyfikację istniejących rekordów w tabeli artykuly, a nie o dodawanie nowych wierszy. To jest taki typowy błąd początkujących: pomieszanie operacji wstawiania danych z operacją ich aktualizacji. Jeśli tabela już zawiera dane i chcemy zmienić wartość w konkretnej kolumnie dla wszystkich wierszy, zawsze sięgamy po UPDATE. Instrukcje wykorzystujące INSERT, typu INSERT INTO artykuly VALUE nowy = TRUE; czy INSERT INTO nowy FROM artykuly SET TRUE;, są niepoprawne składniowo i logicznie. INSERT służy do dodawania nowych rekordów, czyli tworzenia kolejnych wierszy w tabeli. Poprawny wzorzec wygląda mniej więcej tak: INSERT INTO artykuly (kolumna1, kolumna2) VALUES (wartość1, wartość2);. Nie aktualizuje on istniejących pól, tylko dokłada nowe rekordy. Gdybyśmy próbowali użyć INSERT do „ustawienia” kolumny nowy, to w rzeczywistości tworzyliśmy nowe wiersze, a stare rekordy pozostałyby nietknięte, co jest sprzeczne z treścią pytania. Z kolei konstrukcje w rodzaju UPDATE nowy FROM artykuly VALUE TRUE; przypominają czasem składnię innych języków lub narzędzi, ale nie są poprawnym SQL-em. Standard SQL wymaga, żeby po słowie UPDATE pojawiła się nazwa tabeli, a po SET lista kolumn i przypisanych im wartości. Nie ma tu słów kluczowych FROM i VALUE w takiej kombinacji. FROM bywa używane w bardziej zaawansowanych UPDATE’ach, np. w PostgreSQL, ale w formie UPDATE tabela1 SET kolumna = coś FROM tabela2 WHERE warunek; – czyli z zupełnie inną logiką i strukturą. Typowy błąd myślowy polega też na tym, że ktoś próbuje tłumaczyć składnię SQL „na polski” i układa komendy w stylu „INSERT INTO nowy FROM artykuly SET TRUE”, bo brzmi to logicznie w języku naturalnym. Niestety, SQL jest językiem ściśle zdefiniowanym, z bardzo konkretną kolejnością słów kluczowych. Standardowe podejście branżowe jest takie: jeśli modyfikujesz wartości w istniejących wierszach – używasz UPDATE; jeśli dodajesz nowe wiersze – używasz INSERT. Dobrą praktyką jest też najpierw napisać SELECT, który wybiera dokładnie te rekordy, które chcesz zmienić, a dopiero potem na jego podstawie zbudować UPDATE z odpowiednim SET i ewentualnym WHERE. Dzięki temu unikasz przypadkowego uszkodzenia danych.