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: Programowanie webowe Bazy danych

W tabeli zadania istnieje pole tekstowe status. Aby usunąć te zadania, których statusem jest ‘zamknięte’, należy zastosować kwerendę

A.
DELETE FROM zadania WHERE status = 'zamknięte';
B.
TRUNCATE TABLE zadania;
C.
DELETE FROM zadania;
D.
TRUNCATE TABLE zadania WHERE status = 'zamknięte';

Pytanie z egzaminu CKE, styczeń 2024 (arkusz EE.09-SG-24.01).

Zapytanie DELETE FROM zadania WHERE status = 'zamknięte'; jest właściwe, bo usuwa tylko te rekordy z tabeli zadania, które spełniają konkretny warunek zapisany po WHERE. W SQL instrukcja DELETE służy do kasowania wierszy, a klauzula WHERE ogranicza zakres działania operacji. To jest bardzo ważne w praktyce, bo bez WHERE usunięte zostałyby wszystkie zadania, niezależnie od statusu. Pole status jest tekstowe, więc wartość 'zamknięte' musi być zapisana w apostrofach, tak jak robi się to dla literałów tekstowych w SQL. Moim zdaniem to jeden z tych przykładów, które dobrze pokazują różnicę między „czyszczę całą tabelę” a „usuwam wybrane dane”. W normalnej aplikacji, np. panelu do zarządzania zadaniami, taka kwerenda mogłaby być użyta do porządkowania starych wpisów. Dobra praktyka jest taka, żeby przed wykonaniem DELETE najpierw sprawdzić rekordy poleceniem SELECT FROM zadania WHERE status = 'zamknięte';, oczywiście z poprawnie dobraną listą kolumn, np. SELECT * FROM zadania WHERE status = 'zamknięte';. Dzięki temu łatwiej uniknąć przypadkowego skasowania danych.
W tym pytaniu łatwo pomylić dwie różne operacje: usuwanie wybranych rekordów oraz całkowite opróżnienie tabeli. Instrukcja TRUNCATE TABLE zadania; nie nadaje się do tego zadania, ponieważ usuwa wszystkie wiersze z tabeli, bez sprawdzania statusu. Jest to operacja hurtowa, szybka i często traktowana przez silnik bazy danych inaczej niż zwykły DELETE, na przykład może resetować licznik AUTO_INCREMENT. Z mojego doświadczenia uczniowie czasem wybierają TRUNCATE, bo kojarzy się z kasowaniem danych, ale tu potrzebna jest selekcja rekordów, a nie wyczyszczenie całej tabeli. Równie niebezpieczne jest DELETE FROM zadania; bez warunku WHERE. Składniowo taka kwerenda może być poprawna, ale merytorycznie robi coś zupełnie innego: usuwa wszystkie zadania, także otwarte, nowe albo w trakcie realizacji. W prawdziwym systemie byłby to poważny błąd administracyjny. Niepoprawne jest też łączenie TRUNCATE z WHERE, czyli próba zapisania TRUNCATE TABLE zadania WHERE status = 'zamknięte';. Standardowo TRUNCATE nie obsługuje warunku WHERE, bo jego zadaniem nie jest filtrowanie rekordów, tylko opróżnienie całej tabeli. Jeśli chcemy usunąć tylko część danych, używamy DELETE z warunkiem. Najbezpieczniejszy schemat myślenia jest prosty: najpierw SELECT sprawdzający zakres danych, potem DELETE z tym samym WHERE, najlepiej po wykonaniu kopii zapasowej albo w transakcji, jeżeli baza danych to obsługuje.

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.