| Termin | Definicja |
|---|---|
| MERGE | MERGE to polecenie SQL łączące wstawianie, aktualizację i usuwanie wierszy w jednej operacji względem tabeli źródłowej. MERGE jako operacja warunkowego przetwarzania wierszyMERGE jest poleceniem języka SQL służącym do wykonania różnych operacji na tabeli docelowej na podstawie porównania jej danych z tabelą albo wynikiem zapytania źródłowego. Dla każdego wiersza źródłowego ustalany jest wynik warunku dopasowania, zwykle zapisanego w klauzuli Ogólna idea MERGE przypomina połączenie operacji Warunek dopasowania i podział na akcjeNajważniejszym elementem MERGE jest warunek określający, kiedy wiersz źródłowy odpowiada wierszowi tabeli docelowej. W praktyce powinien on opierać się na kluczu głównym, kluczu unikatowym albo innym jednoznacznym identyfikatorze rekordu. Przykładowo, tabela źródłowa może zawierać identyfikator produktu i jego aktualną cenę, a tabela docelowa może przechowywać wcześniejszy stan tych samych produktów. Dopasowanie po identyfikatorze pozwala rozdzielić rekordy na przeznaczone do aktualizacji oraz na nowe rekordy przeznaczone do wstawienia. Warunek Akcje wykonywane po dopasowaniu powinny być rozdzielone logicznie. Aktualizacja może mieć własny warunek, na przykład ograniczać zmianę do rekordów, których wartość źródłowa jest nowsza. Wstawienie może obejmować tylko wiersze nieznalezione w tabeli docelowej. Usunięcie, jeżeli jest dostępne w danym silniku, powinno być stosowane ostrożnie, ponieważ błąd w warunku może usunąć dane zamiast jedynie uzupełnić brakujące rekordy. Transakcja, ograniczenia i skutki uboczneMERGE zwykle wykonuje logicznie wiele zmian w ramach jednej instrukcji, lecz szczegóły atomowości i poziomu izolacji wynikają z konfiguracji oraz zasad konkretnego silnika. Jeżeli operacja jest częścią jawnej transakcji, jej zatwierdzenie lub wycofanie powinno obejmować także inne powiązane instrukcje. Przy dużych zbiorach danych znaczenie mają blokady, indeksy oraz plan wykonania zapytania. Brak indeksu wspierającego warunek dopasowania może spowodować skanowanie tabeli i zwiększyć czas trwania operacji. Na wynik MERGE wpływają ograniczenia tabeli docelowej. Klucz główny i indeksy unikatowe mogą odrzucić wstawienie duplikatu. Ograniczenie Szczególnej uwagi wymaga równoczesne wykonywanie MERGE przez kilka sesji. Dwie operacje mogą jednocześnie uznać ten sam klucz za nieobecny i spróbować go wstawić, co może zakończyć się konfliktem unikatowości albo innym wynikiem zależnym od mechanizmu współbieżności. Bezpieczeństwo takiego scenariusza zależy od poziomu izolacji, blokad i implementacji używanego systemu. Nie należy zakładać, że pojedyncza instrukcja automatycznie eliminuje wszystkie wyścigi między transakcjami. Testowanie i kontrola poprawności wynikuPrzed uruchomieniem MERGE na danych produkcyjnych warto wykonać zapytanie odtwarzające sam warunek dopasowania. Pozwala to policzyć wiersze pasujące, niepasujące oraz potencjalnie wielokrotnie dopasowane. Przydatne jest także zapisanie kopii danych objętych zmianą albo użycie mechanizmu rejestrowania zmodyfikowanych wierszy, jeżeli dany silnik go udostępnia. Test powinien obejmować puste źródło, nowe rekordy, istniejące rekordy, zmienione wartości, duplikaty klucza i wartości Nie każda operacja synchronizacji wymaga MERGE. Gdy logika jest prosta, oddzielne instrukcje W przypadku nieprawidłowego wyniku należy ustalić, która akcja została wybrana dla konkretnego wiersza i jakie wartości były dostępne w źródle w chwili wykonania instrukcji. Pomocne jest uruchomienie tej samej logiki na kontrolnym zbiorze danych oraz porównanie stanu przed i po transakcji. Sama obecność poprawnej składni nie potwierdza poprawności synchronizacji: decydujące znaczenie mają jednoznaczność dopasowania, kompletność danych źródłowych, reguły ograniczeń i zachowanie używanego silnika SQL. |