Operacja INSERT wstawia nowe wiersze do tabeli, podlegając ograniczeniom integralności i wyzwalaczom.
Do czego służy operacja INSERT
Operacja INSERT służy do dodawania nowych wierszy do tabeli relacyjnej bazy danych. W najczęstszym wariancie wskazuje się nazwę tabeli, listę kolumn oraz wartości przeznaczone do zapisania. Jawne podanie listy kolumn ogranicza ryzyko pomyłki, ponieważ wartości są przyporządkowywane według nazwanych kolumn, a nie wyłącznie według fizycznej kolejności pól w tabeli. Przykładowo instrukcja może wstawiać dane do kolumn nazwa i cena, pozostawiając pozostałe kolumny do uzupełnienia wartościami domyślnymi albo wartościami generowanymi przez silnik.
Wartości przekazane do INSERT muszą odpowiadać typom danych zdefiniowanym dla wskazanych kolumn. Tekst zapisuje się jako wartość znakową, liczby jako wartości numeryczne, a brak wartości może być reprezentowany przez NULL, o ile dana kolumna dopuszcza taki stan. NULL nie oznacza zera ani pustego ciągu znaków; oznacza brak znanej lub ustalonej wartości. Instrukcja może również używać słowa kluczowego DEFAULT, aby pozostawić wybór wartości zdefiniowanemu domyślnie wyrażeniu tabeli.
Składnia i sposoby wprowadzania danych
Podstawowa postać operacji obejmuje konstrukcję INSERT INTO tabela (kolumna1, kolumna2) VALUES (wartosc1, wartosc2). Liczba wskazanych wartości musi odpowiadać liczbie kolumn, a ich kolejność musi być zgodna z listą kolumn. Jedna instrukcja może w wielu implementacjach SQL dodawać kilka wierszy przez umieszczenie kilku zestawów wartości po słowie VALUES. Takie rozwiązanie zmniejsza liczbę osobnych poleceń wysyłanych do bazy, choć dokładne limity i zachowanie zależą od konkretnego silnika oraz używanego sterownika.
Dane nie muszą pochodzić wyłącznie z literalnych wartości. Drugi często stosowany wariant ma postać INSERT INTO tabela (kolumny) SELECT ..., dzięki czemu rekordy są pobierane z wyniku zapytania SELECT i zapisywane w tabeli docelowej. Liczba oraz zgodność typów kolumn wyniku muszą odpowiadać kolumnom przeznaczonym do wstawienia. Przy imporcie danych warto jawnie określić mapowanie pól, ponieważ pominięcie kolumny może spowodować użycie wartości domyślnej, zapis NULL albo błąd, zależnie od definicji tabeli i reguł konkretnego systemu.
Ograniczenia integralności i wyzwalacze
Podczas wykonywania INSERT baza sprawdza ograniczenia integralności określone dla tabeli. Ograniczenie NOT NULL wymaga podania wartości dla kolumny, która nie ma dopuszczalnej wartości domyślnej. UNIQUE oraz PRIMARY KEY zapobiegają powstawaniu niedozwolonych duplikatów. CHECK weryfikuje warunek logiczny zapisany w definicji tabeli, natomiast FOREIGN KEY kontroluje powiązanie z rekordem w tabeli referencjonowanej. Jeśli choć jedno wymagane ograniczenie zostanie naruszone, silnik zwykle odrzuca operację albo zgłasza błąd zgodnie ze swoją implementacją.
Wstawienie wiersza może uruchomić wyzwalacze przypisane do operacji dodawania danych. Wyzwalacz może działać przed właściwym zapisem albo po nim, jeśli dany silnik obsługuje taki rodzaj wyzwalacza. Jego zadaniem może być walidacja dodatkowych reguł, zapis informacji audytowych, uzupełnienie danych lub wykonanie powiązanej operacji. Skutki działania wyzwalacza trzeba uwzględniać podczas diagnozowania, ponieważ końcowy rezultat nie zawsze wynika wyłącznie z tekstu instrukcji INSERT. Wyzwalacz może również przerwać operację, jeżeli wykryje stan uznany za niedopuszczalny.
Transakcje, diagnostyka i bezpieczne użycie
Operacja INSERT jest wykonywana w kontekście transakcji. Jeżeli transakcja zostanie zatwierdzona, zmiany stają się trwałe zgodnie z zasadami konkretnego silnika i jego konfiguracją. Jeżeli zostanie wycofana, dodane wiersze nie powinny pozostać w bazie jako część tej transakcji. Przy wstawianiu wielu rekordów transakcja pozwala traktować serię zmian jako jeden logiczny zestaw, co ułatwia zachowanie spójności, gdy zapis jednego elementu zależy od poprawnego zapisania pozostałych.
Przed wykonaniem instrukcji warto sprawdzić wartości wejściowe, typy kolumn, wymagane pola oraz relacje kluczy obcych. W aplikacjach dane powinny być przekazywane za pomocą parametrów zapytania udostępnianych przez sterownik, a nie przez sklejanie tekstu SQL z niezweryfikowanymi danymi użytkownika. Po błędzie należy odczytać komunikat silnika, kod diagnostyczny i stan transakcji, a następnie sprawdzić, czy nie zadziałał wyzwalacz albo ograniczenie unikalności. W przypadku problemów sprzętowych z komputerem używanym do pracy z bazą diagnostyka może obejmować pamięć operacyjną, dysk, połączenie sieciowe i działanie aplikacji klienckiej, ponieważ awaria któregokolwiek z tych elementów może przerwać wysyłanie lub potwierdzanie operacji INSERT.