Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Bazy danych

Podane w ramce polecenie SQL ma za zadanie

UPDATE Uczen SET id_klasy = id_klasy + 1;
A. zwiększyć o jeden wartość pola Uczen.
B. ustawić wartość kolumny id_klasy na 1 dla wszystkich rekordów tabeli Uczen.
C. ustawić na 1 wartość pola Uczen.
D. zwiększyć o jeden wartość kolumny id_klasy dla wszystkich rekordów tabeli Uczen.

Pytanie z egzaminu CKE, styczeń 2020 (arkusz E.14-SG-20.01).

Polecenie UPDATE Uczen SET id_klasy = id_klasy + 1; modyfikuje dane w tabeli Uczen. Kluczowe jest tu słowo UPDATE, które oznacza aktualizację istniejących rekordów, oraz zapis SET id_klasy = id_klasy + 1. Prawa strona wyrażenia odczytuje aktualną wartość kolumny id_klasy w danym wierszu, dodaje do niej 1, a wynik zapisuje z powrotem do tej samej kolumny. Czyli jeśli uczeń miał id_klasy równe 2, po wykonaniu zapytania będzie miał 3. Ponieważ w poleceniu nie ma klauzuli WHERE, operacja zostanie wykonana dla wszystkich rekordów tabeli Uczen. To jest bardzo ważne praktycznie, bo w prawdziwej bazie danych takie zapytanie może zmienić setki albo tysiące wierszy naraz. Moim zdaniem to jedno z tych miejsc w SQL, gdzie trzeba mieć nawyk zatrzymania się na chwilę i sprawdzenia, czy na pewno chcemy zmienić całą tabelę. Dobra praktyka branżowa to najpierw wykonać SELECT, np. SELECT id_klasy FROM Uczen;, a dopiero potem UPDATE. W systemach produkcyjnych warto też używać transakcji, kopii zapasowej i klauzuli WHERE, jeśli zmiana ma dotyczyć tylko wybranych uczniów. Trzeba też pamiętać, że jeśli id_klasy jest kluczem obcym do tabeli klas, taka zmiana może naruszyć spójność danych, jeśli nowe identyfikatory klas nie istnieją.
W tym zapytaniu łatwo pomylić nazwę tabeli z nazwą kolumny, szczególnie gdy ktoś dopiero zaczyna pracę z SQL. Uczen nie jest polem, tylko nazwą tabeli, czyli zbioru rekordów opisujących uczniów. Poleceniem UPDATE wskazujemy właśnie tabelę, w której mają zostać zmienione dane. Zmienianą kolumną jest dopiero id_klasy, bo pojawia się po słowie SET. Dlatego interpretacja, że modyfikowana jest wartość pola Uczen, nie pasuje do składni SQL i wynika raczej z czytania zapytania jak zwykłego zdania, a nie jak instrukcji języka zapytań. Równie częsty błąd to uznanie, że zapis id_klasy = id_klasy + 1 oznacza ustawienie wartości na 1. Tak nie jest. Gdyby celem było wpisanie jedynki do kolumny, zapytanie wyglądałoby raczej tak: UPDATE Uczen SET id_klasy = 1;. Tutaj po prawej stronie znaku równości znajduje się wyrażenie arytmetyczne, które korzysta z dotychczasowej wartości kolumny. SQL dla każdego wiersza oblicza nową wartość osobno. Czyli 1 zmieni się w 2, 4 w 5, a 10 w 11. Warto też zauważyć brak WHERE. To nie jest drobiazg, tylko bardzo istotny element. Bez warunku baza danych nie wybiera pojedynczego ucznia ani wybranej klasy, tylko aktualizuje wszystkie rekordy w tabeli. Z mojego doświadczenia to typowa pułapka na sprawdzianach i w praktyce zawodowej też: ktoś pamięta UPDATE i SET, ale zapomina, że brak WHERE oznacza operację masową. W realnym projekcie taka pomyłka może popsuć relacje między tabelami, szczególnie jeśli id_klasy jest kluczem obcym. Dlatego przed aktualizacją danych dobrze jest wykonać zapytanie kontrolne SELECT, używać transakcji oraz upewnić się, że nowe wartości mają sens w modelu bazy.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.