| Termin | Definicja |
|---|---|
| Operacja UPDATE | Operacja UPDATE modyfikuje istniejące wiersze — pominięcie klauzuli WHERE zmienia całą tabelę. Operacja UPDATE – czym jest modyfikowanie danych w tabeliOperacja UPDATE należy do podstawowych poleceń języka SQL i służy do zmiany danych, które już znajdują się w tabeli. Nie tworzy nowego wiersza i nie usuwa istniejącego rekordu. Jej zadaniem jest zastąpienie jednej lub kilku wartości w wybranych wierszach innymi wartościami. Dzięki temu możliwe jest między innymi poprawienie literówki w nazwie produktu, aktualizacja statusu zamówienia, zmiana adresu kontaktowego albo uzupełnienie pola, które wcześniej pozostawało puste. Najczęściej polecenie składa się ze słowa UPDATE, nazwy tabeli, klauzuli SET oraz warunku WHERE. Część SET wskazuje kolumny przeznaczone do zmiany i wartości, które mają zostać zapisane. Klauzula WHERE ogranicza zakres działania do rekordów spełniających określone kryterium. W uproszczonej postaci zapytanie wygląda następująco:
W tym przykładzie zmieniony zostanie status rekordu identyfikowanego numerem 15. Pozostałe wiersze tabeli pozostaną bez zmian, o ile nie spełniają warunku. Takie rozdzielenie celu operacji od zakresu działania jest istotne, ponieważ pojedyncze polecenie UPDATE może oddziaływać zarówno na jeden rekord, jak i na dużą część tabeli. Warto pamiętać, że modyfikacja danych jest operacją zapisu. Po jej wykonaniu wcześniejsza wartość może zostać zastąpiona, dlatego przed uruchomieniem zapytania powinno się sprawdzić warunek, typy danych oraz przewidywaną liczbę zmienianych wierszy. Sama poprawność składni nie oznacza jeszcze, że zapytanie jest bezpieczne pod względem zakresu działania. Operacja UPDATE – klauzula WHERE, zakres i porównanie z innymi poleceniamiNajważniejszą różnicę między kontrolowaną a niezamierzoną zmianą stanowi obecność właściwej klauzuli WHERE. Warunek może odnosić się do identyfikatora, kategorii, daty, statusu lub kombinacji kilku kryteriów. Przykładowo:
Zmiana dotyczy tu zamówienia o konkretnym numerze. Jeżeli natomiast warunek zostanie zbudowany na podstawie kilku kolumn, zakres może obejmować wiele rekordów:
Takie polecenie ma sens wtedy, gdy zamiarem jest wyłączenie wszystkich produktów spełniających oba kryteria. Należy zwrócić uwagę na operator AND, ponieważ wymaga jednoczesnego spełnienia warunków. Operator OR rozszerza zakres i może wskazać znacznie więcej wierszy, niż początkowo zakładano. Również porównania z wartością NULL wymagają właściwej składni, zwykle z użyciem IS NULL albo IS NOT NULL, a nie zwykłego znaku równości. UPDATE różni się od INSERT i DELETE zakresem przeznaczenia. INSERT dodaje nowe wiersze, DELETE usuwa istniejące, a UPDATE modyfikuje zawartość już zapisanych rekordów. Z kolei SELECT służy do odczytu i sam w sobie nie zmienia danych. Przed wykonaniem aktualizacji rozsądne jest uruchomienie odpowiadającego jej warunku w zapytaniu SELECT, aby zobaczyć, które wiersze zostaną objęte operacją.
Jeżeli wynik nie odpowiada założeniom, nie powinno się przechodzić do UPDATE. Najpierw należy poprawić kryteria albo potwierdzić, że szerszy zakres jest zamierzony. Operacja UPDATE – typowe problemy i skutki błędnego zapytaniaJednym z częstych problemów jest pominięcie WHERE. W takiej sytuacji instrukcja obejmuje wszystkie wiersze tabeli. Przykład:
Wykonanie tego polecenia ustawi wskazaną wartość w całej tabeli, niezależnie od wcześniejszego stanu poszczególnych rekordów. Czasem jest to celowe, lecz zwykle wynika z przeoczenia. Samo dodanie WHERE nie wystarcza, jeśli warunek jest zbyt ogólny. Kryterium Innym zagrożeniem jest pomylenie kolumny identyfikującej z kolumną opisową. Aktualizacja według imienia, miasta albo nazwy produktu może nie wskazać jednego rekordu. Bezpieczniejszy zakres uzyskuje się zwykle dzięki kluczowi głównemu lub innemu ograniczeniu gwarantującemu unikalność. Warto też uważać na wartości domyślne, automatyczne konwersje typów oraz zaokrąglenia pól liczbowych. Zapis tekstu w kolumnie przeznaczonej na liczbę może zakończyć się błędem albo nieoczekiwaną interpretacją. Problem może pojawić się także wtedy, gdy aktualizacja narusza ograniczenia integralności. Tabela może wymagać unikalności, określonego formatu, obecności wartości albo zgodności z rekordem z innej tabeli. Wówczas baza danych może odrzucić zmianę. Jeżeli część operacji została już wykonana w ramach większego procesu, znaczenie ma transakcja. Polecenia COMMIT i ROLLBACK pozwalają odpowiednio zatwierdzić albo wycofać zestaw zmian, o ile sposób pracy z bazą obsługuje taki mechanizm. Należy również brać pod uwagę blokady i równoczesny dostęp wielu użytkowników. Długotrwała aktualizacja dużego zakresu może opóźniać inne operacje. Z tego powodu przy większych zbiorach stosuje się często mniejsze partie, odpowiednie indeksy oraz wykonywanie zmian w kontrolowanym czasie. Konkretne rozwiązanie zależy od rodzaju bazy, struktury tabeli i znaczenia modyfikowanych danych. Operacja UPDATE – praktyczne wskazówki przed i po wykonaniuPrzed zmianą danych powinno się ustalić dokładny cel operacji: która tabela jest właściwa, które kolumny mają zostać zmodyfikowane oraz jakie rekordy powinny pozostać nietknięte. Następnie warto sprawdzić strukturę tabeli, typy kolumn, klucze, ograniczenia i ewentualne reguły automatycznie uruchamiane przy zapisie. Pomocne jest przygotowanie zapytania SELECT z identyczną klauzulą WHERE jak w planowanym UPDATE.
Przydatna bywa także technika zapisania poprzednich wartości przed modyfikacją. W zależności od środowiska może to oznaczać kopię wybranych wierszy, dziennik zmian albo przygotowanie osobnego zestawu danych testowych. Na etapie testów należy używać informacji nieprodukcyjnych lub odizolowanej kopii, aby nie naruszyć rzeczywistych rekordów. Dobrą praktyką jest dokumentowanie powodu zmiany, daty wykonania, zastosowanego warunku i przewidywanej liczby wierszy. Nie powinno się opierać bezpieczeństwa wyłącznie na interfejsie aplikacji. Formularz może ograniczać zakres wyboru, lecz zapytanie wysyłane do bazy powinno nadal mieć własne zabezpieczenia. W kodzie aplikacji należy stosować parametryzację zamiast składania zapytań z niekontrolowanych fragmentów tekstu. Chroni to przed wstrzyknięciem poleceń i ogranicza ryzyko błędnej interpretacji znaków specjalnych. Operacja UPDATE – kiedy zgłosić problem do serwisuDo konsultacji technicznej warto zgłosić się wtedy, gdy po aktualizacji zmieniła się większa liczba rekordów, niż przewidywano, zniknęły wcześniejsze wartości, aplikacja przestała poprawnie odczytywać dane albo pojawiły się komunikaty o naruszeniu spójności. W takiej sytuacji nie powinno się wykonywać kolejnych przypadkowych UPDATE, ponieważ następne zmiany mogą utrudnić ustalenie pierwotnej przyczyny i odtworzenie właściwego stanu. Przed przekazaniem problemu warto zabezpieczyć komunikat błędu, czas wykonania, nazwę aplikacji, opis oczekiwanego rezultatu oraz informację o tym, czy operacja była wykonywana ręcznie, czy automatycznie. Nie należy przekazywać haseł ani pełnych danych wrażliwych. Jeżeli dostępna jest kopia zapasowa lub dziennik zmian, informacja o ich czasie może pomóc w dobraniu bezpiecznej metody odzyskania danych. W Warszawie wsparcie przy problemach z komputerem, aplikacją bazodanową lub nieprawidłowo działającym środowiskiem może zostać zgłoszone do Warszawskiego Pogotowia Komputerowego 24/7; naprawy z reguły realizowane są do 3 dni roboczych. Przed rozpoczęciem działań technicznych warto opisać, jakie zapytanie wykonano, na jakiej tabeli pracowano i jaki wynik miał zostać osiągnięty. Tak przygotowane informacje ułatwiają ocenę sytuacji, ograniczenie dalszych zmian oraz dobór sposobu przywrócenia poprawnych danych. |