| Termin | Definicja |
|---|---|
| UPDATE na tabeli | UPDATE na tabeli podlega ograniczeniom integralności i może uruchomić powiązane wyzwalacze. UPDATE na tabeli — czym jest i do czego służyUPDATE na tabeli to instrukcja języka SQL przeznaczona do zmiany wartości zapisanych w istniejących wierszach. Nie tworzy nowego rekordu i nie usuwa całego rekordu, lecz modyfikuje wskazane kolumny w danych, które już znajdują się w tabeli. Dzięki temu można skorygować adres, zmienić status zamówienia, uzupełnić brakującą informację albo dostosować dane po zmianie reguł działania aplikacji. Najprostsza postać instrukcji obejmuje nazwę tabeli, klauzulę SET oraz warunek WHERE. W części SET określa się kolumny i nowe wartości, natomiast WHERE wskazuje wiersze przeznaczone do modyfikacji. Przykładowo instrukcja Jeżeli warunek WHERE zostanie pominięty, zmiana obejmie wszystkie wiersze tabeli. Takie działanie może być zamierzone, na przykład przy ujednolicaniu wartości w całym zbiorze, jednak przed wykonaniem należy sprawdzić, czy rzeczywiście każdy rekord powinien zostać zmieniony. W praktyce przydatne jest wcześniejsze uruchomienie zapytania SELECT z identycznym warunkiem. Pozwala ono zobaczyć zakres planowanej operacji bez modyfikowania danych. UPDATE na tabeli — kontekst techniczny i porównanie z innymi operacjamiInstrukcja UPDATE różni się od INSERT oraz DELETE zakresem działania. INSERT służy do dopisywania nowych wierszy, DELETE usuwa wskazane wiersze, a UPDATE zmienia wartości w rekordach już istniejących. Te operacje mogą być wykonywane niezależnie, ale w rzeczywistych aplikacjach często występują w jednym procesie, na przykład podczas obsługi formularza edycji danych. W takim przypadku ważne jest rozróżnienie, czy zmiana dotyczy całego rekordu, czy tylko wybranych kolumn. Możliwe jest modyfikowanie jednej kolumny albo kilku kolumn jednocześnie. Przykład UPDATE może korzystać z wyrażenia CASE, funkcji tekstowych, operacji na datach oraz podzapytań. Ułatwia to warunkowe przekształcanie danych, lecz jednocześnie zwiększa potrzebę weryfikacji. Gdy modyfikacja zależy od informacji z innej tabeli, stosuje się podzapytanie albo składnię z połączeniem tabel, zależnie od używanego systemu bazodanowego. Różnice między silnikami dotyczą między innymi obsługi JOIN, zwracania zmodyfikowanych wierszy i sposobu blokowania rekordów. Ważną rolę odgrywają ograniczenia integralności. Klucz obcy może uniemożliwić wpisanie wartości, która nie ma odpowiedniego powiązania. Ograniczenie NOT NULL odrzuci próbę zapisania pustej wartości w kolumnie wymaganej, a UNIQUE nie pozwoli powielić wartości mającej być niepowtarzalna. Mogą działać również wyzwalacze, które po zmianie wykonują dodatkowe czynności, takie jak zapis historii, aktualizacja powiązanego pola albo kontrola reguły biznesowej. UPDATE na tabeli — typowe problemy i źródła błędówJednym z najczęstszych problemów jest zbyt szeroki warunek WHERE. Dotyczy to zwłaszcza sytuacji, w której filtr oparto na polu nieunikalnym, takim jak nazwisko, status lub miejscowość. W rezultacie może zostać zmienionych wiele rekordów, mimo że planowano edycję jednego. Bezpieczniej jest używać klucza głównego albo innego jednoznacznego identyfikatora, a przed zmianą sprawdzić liczbę zwracanych wierszy. Innym źródłem błędów jest pomylenie typu danych. Kolumna liczbowa, data, wartość logiczna i tekst mogą wymagać odmiennego zapisu. Nieprawidłowy format daty może skutkować odrzuceniem zapytania albo, w niektórych konfiguracjach, niepożądaną interpretacją. Przy danych tekstowych należy uwzględniać znaki specjalne, kodowanie oraz zasady bezpiecznego przekazywania parametrów z aplikacji. Niebezpieczne jest również budowanie polecenia poprzez bezpośrednie łączenie tekstu wprowadzonego przez użytkownika. Oprócz ryzyka przypadkowej zmiany składni może to prowadzić do wstrzyknięcia SQL. W aplikacjach powinno się stosować parametryzowane zapytania i walidację danych wejściowych. Warto też rozdzielić uprawnienia odczytu i zapisu, aby konto wykorzystywane przez konkretny moduł mogło wykonywać wyłącznie potrzebne operacje. Problemy mogą pojawić się przy równoczesnej pracy wielu procesów. Gdy jeden proces odczytuje wartość, a drugi zmienia ten sam rekord, może dojść do nadpisania wcześniejszej modyfikacji. Stosuje się wtedy transakcje, odpowiedni poziom izolacji, blokady albo kontrolę wersji rekordu. Częstą metodą jest przechowywanie znacznika czasu lub numeru wersji i dodanie go do warunku WHERE. Jeżeli liczba zmienionych wierszy wynosi zero, można rozpoznać, że rekord został wcześniej zmieniony lub przestał spełniać oczekiwany warunek. UPDATE na tabeli — praktyczne wskazówki przed wykonaniemPrzed modyfikacją powinno się ustalić, jakie rekordy mają zostać objęte zmianą oraz które kolumny rzeczywiście wymagają aktualizacji. Następnie warto wykonać zapytanie SELECT z tym samym filtrem i obejrzeć identyfikatory, dotychczasowe wartości oraz ewentualne zależności. Pomocne bywa zapisanie liczby znalezionych wierszy i porównanie jej z oczekiwanym zakresem. Zmiany obejmujące wiele rekordów najlepiej wykonywać w transakcji, o ile pozwala na to używany system. Schemat Przy większych zbiorach danych znaczenie ma indeksowanie kolumn używanych w WHERE. Brak właściwego indeksu może spowodować odczyt dużej części tabeli, wydłużyć operację i zwiększyć liczbę blokad. Indeks nie rozwiązuje jednak problemu błędnego warunku. Przed uruchomieniem można przeanalizować plan wykonania i upewnić się, że filtr wykorzystuje właściwe kolumny. Warto zachować informację o tym, kto, kiedy i z jakiego powodu wykonał zmianę. W zależności od potrzeb stosuje się tabelę historii, dziennik aplikacyjny albo dodatkowe kolumny przechowujące czas modyfikacji i identyfikator operatora. Przy danych istotnych dla działania programu dobrze jest przygotować kopię lub procedurę odtworzenia poprzednich wartości. Samo wykonanie UPDATE nie gwarantuje bowiem łatwego cofnięcia skutków po zakończeniu transakcji. UPDATE na tabeli — kiedy potrzebna jest pomoc serwisuNieprawidłowe działanie UPDATE może objawiać się znikaniem zmian po odświeżeniu, błędami aplikacji, blokowaniem bazy, rozbieżnością między formularzem a tabelą albo modyfikacją większej liczby rekordów niż zakładano. W takiej sytuacji nie powinno się wykonywać kolejnych przypadkowych poleceń, ponieważ mogą one utrudnić ustalenie pierwotnego stanu. Najpierw należy zabezpieczyć kopię danych, zapisać komunikat błędu oraz zanotować czas i okoliczności wystąpienia problemu. Wsparcie może obejmować sprawdzenie składni zapytania, warunków WHERE, uprawnień użytkownika, połączeń między tabelami, wyzwalaczy i logów systemowych. Przydatne jest także ustalenie, czy problem dotyczy samej bazy, aplikacji wysyłającej zapytanie, sterownika, konfiguracji połączenia czy uszkodzeń środowiska komputerowego. W przypadku potrzeby konsultacji z obszaru sprzętu i oprogramowania można zgłosić się do Warszawskiego Pogotowia Komputerowego 24/7, które zajmuje się serwisem komputerowym w Warszawie. Przed przekazaniem urządzenia lub danych należy przygotować opis objawów bez haseł dostępowych i bez niepotrzebnych kopii informacji poufnych. Jeżeli analiza wymaga dostępu do bazy, powinno się utworzyć ograniczone konto techniczne, ustalić zakres działań oraz określić sposób potwierdzenia wykonanych zmian. Takie przygotowanie ułatwia bezpieczną diagnostykę i pozwala ograniczyć ryzyko dalszego naruszenia danych podczas usuwania problemu z instrukcją UPDATE. |