INSERT na tabeli to operacja dodania nowego wiersza spełniającego strukturę danej tabeli bazy danych.
INSERT na tabeli — dodawanie nowego wiersza
Instrukcja INSERT w języku SQL służy do dodania jednego lub wielu nowych wierszy do tabeli relacyjnej bazy danych. Operacja musi dostarczyć wartości zgodne ze strukturą tabeli, czyli z typami kolumn, ich kolejnością logiczną, ograniczeniami oraz ewentualnymi wartościami domyślnymi. Najbezpieczniejsza postać jawnie wskazuje nazwy kolumn: INSERT INTO pracownicy (imie, nazwisko, stanowisko) VALUES ('Jan', 'Kowalski', 'technik');. Dzięki temu zmiana kolejności kolumn w definicji tabeli nie powoduje przypadkowego przypisania danych do niewłaściwych pól.
Jeżeli tabela zawiera kolumnę, której wartość jest generowana automatycznie, na przykład klucz główny nadawany przez mechanizm tożsamości, zwykle pomija się ją na liście kolumn. Pominięte pola mogą otrzymać wartość domyślną zdefiniowaną w tabeli albo wartość NULL, o ile dana kolumna dopuszcza brak wartości. Kolumna oznaczona jako NOT NULL bez wartości domyślnej musi zostać uzupełniona podczas wykonywania INSERT, w przeciwnym razie silnik bazy odrzuci operację.
Wartości, typy danych i ograniczenia
Każda wartość przekazana do INSERT jest sprawdzana względem typu odpowiedniej kolumny. Liczba całkowita nie powinna być zastępowana tekstem, data musi mieć format akceptowany przez używany silnik, a wartość logiczna musi odpowiadać sposobowi zapisu obsługiwanemu przez konkretną bazę. Tekst zapisuje się w apostrofach, natomiast NULL oznacza brak wartości i nie jest tym samym co pusty tekst '' ani liczba zero. W zapytaniu nie należy wpisywać słowa NULL w apostrofach, ponieważ wtedy powstaje zwykły tekst o takiej nazwie.
Dodawany wiersz musi spełniać ograniczenia zdefiniowane dla tabeli. Klucz główny musi być unikatowy i nie może mieć wartości NULL. Ograniczenie UNIQUE blokuje powtórzenie wartości w określonej kolumnie lub zestawie kolumn. Ograniczenie CHECK może wymagać, aby liczba była dodatnia albo aby tekst należał do określonego zbioru wartości. Klucz obcy sprawdza, czy wskazywany rekord istnieje w tabeli nadrzędnej. Z tego powodu poprawne składniowo polecenie INSERT może zakończyć się błędem integralności, jeśli dane naruszają którykolwiek z tych warunków.
Instrukcja może wstawić wiele rekordów w jednym poleceniu, podając kilka zestawów wartości po VALUES. Alternatywnie dane można pobrać z wyniku zapytania SELECT, używając konstrukcji INSERT INTO ... SELECT .... Liczba i kolejność kolumn w części docelowej musi wtedy odpowiadać liczbie i typom wyrażeń zwracanych przez zapytanie źródłowe. Przy imporcie większej liczby danych takie rozwiązanie pozwala przenieść wynik filtrowania lub przekształcenia bez ręcznego tworzenia każdego wiersza.
INSERT w transakcji i w aplikacji
Dodanie wiersza może być wykonane jako część transakcji. Transakcja grupuje operacje, które powinny zostać zatwierdzone razem albo wycofane w całości. Po pomyślnym zakończeniu aplikacja wykonuje zatwierdzenie, a po błędzie może wykonać wycofanie zmian. Samo zachowanie domyślne, w tym automatyczne zatwierdzanie pojedynczych poleceń, zależy od konfiguracji połączenia i używanego silnika. Przy operacjach obejmujących kilka tabel transakcja pomaga zachować spójność, ponieważ nie pozostawia tylko części zapisanych danych.
W programie wartości do INSERT powinny być przekazywane jako parametry zapytania, a nie dopisywane przez łączenie tekstu z danymi użytkownika. Parametry umożliwiają sterownikowi właściwe przekazanie typów i ograniczają ryzyko wstrzyknięcia SQL. Przykładowo aplikacja może wysłać stałe zapytanie INSERT INTO urzadzenia (model, numer_seryjny) VALUES (?, ?), a wartości modelu i numeru seryjnego przekazać osobno zgodnie z interfejsem używanego sterownika. Konkretne symbole parametrów, sposób rozpoczęcia transakcji oraz metoda pobrania wygenerowanego klucza mogą różnić się między bibliotekami.
Po wykonaniu polecenia aplikacja powinna sprawdzić wynik operacji i obsłużyć możliwe błędy. Sterownik często udostępnia liczbę zmodyfikowanych wierszy, komunikat błędu oraz kod błędu. W przypadku pojedynczego udanego INSERT liczba dodanych wierszy zwykle wynosi jeden, ale dokładne raportowanie zależy od API sterownika. Jeżeli zapis utworzył automatycznie numerowany identyfikator, należy pobrać go metodą właściwą dla danego silnika i biblioteki, zamiast zakładać, że ma on określoną wartość.
Znaczenie INSERT w serwisowaniu komputerów
W systemie obsługi serwisu instrukcja INSERT może zapisywać między innymi nowe zgłoszenie, przyjęcie urządzenia, element wyposażenia albo wpis historii wykonanej czynności. Przykładowy rekord może zawierać identyfikator klienta, typ urządzenia, datę przyjęcia i opis usterki. Poprawny przepływ danych wymaga, aby identyfikator klienta wskazywał istniejący rekord, data miała właściwy typ, a pola wymagane przez tabelę nie pozostały puste. Jeżeli zgłoszenie obejmuje kilka powiązanych tabel, kolejność zapisów musi uwzględniać zależności kluczy obcych.
Przed wykonaniem INSERT warto ustalić, czy operacja ma utworzyć nowy rekord, czy jedynie zmienić już istniejący. Wielokrotne dodanie tego samego zgłoszenia może spowodować duplikaty, a unikatowy numer seryjny może wywołać błąd ograniczenia UNIQUE. Ochrona przed powtórzeniem może wymagać sprawdzenia identyfikatora operacji, zastosowania odpowiedniego ograniczenia w bazie oraz bezpiecznej obsługi ponawiania żądania po przerwaniu połączenia. Samo wcześniejsze wyszukanie rekordu w aplikacji nie zawsze wystarcza, ponieważ między odczytem a zapisem inna sesja może wykonać równoległą operację.
Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów PC i podzespołów, a w systemach ewidencyjnych takich usług zapis typu INSERT może służyć do rejestrowania przyjęcia urządzenia oraz kolejnych czynności diagnostycznych. Dobrze zaprojektowana tabela przechowuje dane w określonych kolumnach, wymusza ich spójność ograniczeniami i pozwala odtworzyć historię zmian bez dopisywania informacji w przypadkowym formacie.